2015-07-28 154 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 
    } 
} 

在這裏,我不得不寫BuilderGetter因爲,如果我想返回一個可選的同時使用龍目島,我將有宣佈line2Optional<String>。這將產生一個建造者的方法,接受Optional<String>

是否有使用龍目島與Optional任何其他方式?

回答

9

答案是否定的,它可能永遠不會。

您可能會做錯:-) Optional不是null的替代品,也不是防止NullPointerException的奇特方法。它表明這個問題是無法回答的,例如:一個空的人名單的平均年齡是多少。

Optional S的關係永遠不會被通過,但儘快通過調用代碼拆箱。

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

見由於這些方案都只是極少數,而Lombok的喜歡,使程序員編寫更好的代碼,我不認爲有將永遠支持它在龍目島。

披露:我是一名龍目島開發人員。

+13

我真的很感謝你回答這個問題!謝謝! 我知道這種不使用'可選'作爲'null'替換的原理。如果在getter中使用''Optional',它將會過度使用。但是,Google Guava的開發人員還有另一種更方便的理​​念,它允許您使用Optional來替換null [Guava的可選](http://docs.guava-libraries.googlecode.com/git/javadoc/com/google /common/base/Optional.html) 所以,我個人認爲,'lombok' SHLD保持中立,並提供autoOptional支持,並留下是否使用它,或者不給程序員 –

+0

我們總是可以增加新的功能,但我們確實試圖首先關注最重要的功能。這在我們看來不是其中之一。我們還沒有遇到過這種模式。 –

+0

確實有在領域和getter有可選的參數。它可以成爲你使用null的很多地方的一個很好的替代品,但是並不試圖模仿isPresent的空檢查。 – ymajoros