2015-07-28 7 views
22

में वैकल्पिक मैं एक वर्ग Address कहा जाता है जो इस तरह दिखता है:लंबोक

@Value 
class Address { 

    @NotNull String userId; 
    @NotNull String line1; 
    String line2; 

    private Address(Builder b) { 
     // copy everything from builder 
    } 

    // override getter for line2 so that it returns Optional<String> 
    public Optional<String> getLine2() { 
     return Optional.fromNullable(this.line2); 
    } 

    // and a Builder 
    public static class Builder { 
    // builder methods 
    } 
} 

यहाँ मैं Builder लिखने के लिए मजबूर कर रहा हूँ और एक Getter क्योंकि, मैं लंबोक का उपयोग करते समय एक वैकल्पिक वापस जाने के लिए चाहते हैं, तो मैं होगा line2 को Optional<String> घोषित करने के लिए। और वह एक बिल्डर विधि उत्पन्न करेगा जो Optional<String> स्वीकार करता है!

Optional के साथ लोम्बोक का उपयोग करने का कोई अन्य तरीका है?

उत्तर

9

उत्तर नहीं है, और शायद यह कभी नहीं होगा।

आप शायद यह गलत कर रहे हैं :-) Optionalnull के लिए प्रतिस्थापन नहीं है और न ही NullPointerException को रोकने के लिए एक शानदार तरीका है। यह इंगित करना है कि प्रश्न असंभव है, जैसे: व्यक्तियों की खाली सूची की औसत आयु क्या है।

Optional एस को कभी भी पारित नहीं किया जाना चाहिए, लेकिन जितनी जल्दी हो सके कॉलिंग कोड द्वारा अनबॉक्स किया जाना चाहिए।

भी https://www.voxxed.com/blog/2015/01/embracing-void-6-refined-tricks-dealing-nulls-java/

देखें चूंकि इन स्थितियों सिर्फ एक मुट्ठी भर रहे हैं, और लंबोक, मैं वहाँ कभी लंबोक में इसके लिए समर्थन हो जाएगा उम्मीद नहीं है बेहतर कोड लिखने के लिए प्रोग्रामर सक्षम करने के लिए पसंद करती है।

प्रकटीकरण: मैं एक लंबोक डेवलपर हूं।

+13

मैं वास्तव में इस प्रश्न का उत्तर देने की सराहना करता हूं! धन्यवाद! मुझे 'वैकल्पिक' का उपयोग न करने के इस दृष्टिकोण के बारे में पता है, 'शून्य' के प्रतिस्थापन के रूप में। और अगर गेटर्स में उपयोग किया जाता है तो यह 'वैकल्पिक' का अधिक उपयोग करेगा। लेकिन फिर Google Guava के डेवलपर्स का एक और अधिक सुविधाजनक, दर्शन है, जो आपको नल [गुवा के वैकल्पिक] को बदलने के लिए वैकल्पिक का उपयोग करने की अनुमति देता है (http://docs.guava-libraries.googlecode.com/git/javadoc/com/google /common/base/Optional.html) तो, मैं व्यक्तिगत रूप से सोचता हूं कि 'लोम्बोक' शेल्ड तटस्थ रहता है और ऑटोऑप्शनल के लिए समर्थन प्रदान करता है, और प्रोग्रामर के लिए इसका उपयोग करना है या नहीं, –

+0

हम हमेशा सुविधाओं को जोड़ सकते हैं, लेकिन हम वास्तव में सबसे महत्वपूर्ण सुविधाओं पर ध्यान केंद्रित करने की कोशिश करें। यह हमारी राय में से एक नहीं है। हमने इस पैटर्न का बहुत कुछ नहीं सामना किया है। –

+0

खेतों और गेटर्स में वैकल्पिक होने के लिए वास्तव में तर्क हैं। यह बहुत से स्थानों के लिए एक महान प्रतिस्थापन हो सकता है जहां आप शून्य का उपयोग करेंगे, लेकिन isPresent के साथ शून्य जांच की नकल करने की कोशिश नहीं कर रहे हैं। – ymajoros

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