2016-10-28 6 views
9

मैं लंबोक @Builder एनोटेशन उपयोग कर रहा हूँ, लेकिन मैं String क्षेत्रों में से कुछ करना चाहते हैं NPEs से बचने के लिए "" के लिए वैकल्पिक और डिफ़ॉल्ट होने के लिए @Getter टिप्पणी के साथ डिफ़ॉल्ट फ़ील्ड मान। क्या इसे करने का कोई आसान तरीका है? मुझे कुछ भी नहीं मिला।@Builder या लंबोक

वैकल्पिक रूप से, @Getter को डिफ़ॉल्ट मान वापस करने के लिए अनुकूलित करने का एक तरीका यदि चर null है।

उत्तर

5

संस्करण v1.16.16 से शुरू उन्होंने @Builder.Default जोड़ा।

@Builder.Default आप जब @Builder का उपयोग कर अपने खेतों के लिए डिफ़ॉल्ट मान कॉन्फ़िगर करने देता है।

उदाहरण:

@Setter 
@Getter 
@Builder 
public class MyData { 
    private Long id; 
    private String name; 

    @Builder.Default 
    private Status status = Status.NEW; 
} 

पुनश्च: नाइस बात वे भी इस मामले में चेतावनी जोड़ने आप @Builder.Default उपयोग नहीं किया।

चेतावनी: (35, 22) जावा: @ बुल्डर पूरी तरह से अभिव्यक्ति को प्रारंभिक रूप से अनदेखा कर देगा। यदि आप प्रारंभिक अभिव्यक्ति को डिफ़ॉल्ट रूप से सेवा देने के लिए चाहते हैं, तो @ Builder.Default जोड़ें। यदि इसे इमारत के दौरान सेटटेबल नहीं माना जाता है, तो फ़ील्ड को अंतिम बनाएं।

+0

में भूल गए हैं, यह बिल्कुल अच्छा नहीं है! यदि आप '@ Default.builder' ** और **' @ NoArgsConstructor' का उपयोग करते हैं (मुझे पता है कि यह समझ में नहीं आता है ** लेकिन ** कभी-कभी कुछ ढांचे के कारण आपको ** ** कोई तर्क कन्स्ट्रक्टर प्रदान नहीं करना चाहिए), प्रारंभिक ** ** नहीं है ** डिफ़ॉल्ट कन्स्ट्रक्टर में उपयोग किया जाता है! यह एक गंभीर बग है। –

+0

हां, मैं आपसे सहमत हूं; लोम्बोक द्वारा जेनरेट कोड का डिज़ाइन इतना अच्छा नहीं है (जेनरेटेड क्लास की जांच करना अच्छा विचार है)। स्वयं द्वारा नो-Args-constructor लिखने के लिए एक कामकाज। – JafarKhQ

3

आप नीचे दिए गए जैसे बिल्डर वर्ग प्रदान करने के लिए है:

@Builder 
public class XYZ { 
    private String x; 
    private String y; 
    private String z; 

    private static class XYZBuilder { 
     private String x = "X"; 
     private String y = "Y"; 
     private String z = "Z"; 
    } 
} 

फिर x के लिए डिफ़ॉल्ट मान, y, z"X", "Y", "Z" हो जाएगा।

2

दूसरा तरीका इस प्रकार @Builder(toBuilder = true)

@Builder(toBuilder = true) 
public class XYZ { 
    private String x = "X"; 
    private String y = "Y"; 
    private String z = "Z"; 
} 

उपयोग करने के लिए है और फिर आप इसका इस्तेमाल इस प्रकार है:

new XYZ().toBuilder().build(); 

accepted answer के संबंध में, इस दृष्टिकोण कम वर्ग नाम करने के लिए समझदार है। यदि आप XYZ का नाम बदलते हैं लेकिन आंतरिक स्थैतिक वर्ग XYZBuilder का नाम बदलना भूल जाते हैं, तो जादू चला गया है!

आपके दृष्टिकोण को और अधिक उपयोग करने के लिए यह आपके ऊपर निर्भर है।

+1

आप 'x) (' '' '' XYZ() ' –

+0

@HazelTroost निश्चित – JeanValjean

संबंधित मुद्दे