2017-11-08 17 views
0

返品時に@NonNull注釈を追加する理由Optional?この記事に基づいて@ NonNullでOptionalを返す関数に注釈を付ける?

public Optional<Integer> getInt() { 
    return Optional.ofNullable(localInteger); 
} 

@NonNull 
public Optional<Integer> getInt() { 
    return Optional.ofNullable(localInteger); 
} 

:その記事とOptionalhttp://www.oracle.com/technetwork/articles/java/java8-optional-2175753.html 私の理解では、Optionalの全体のポイントがしようとすると、コードにnullをチェックしてたときにということを防止することであるということです関数はnullを返します。かどうかを呼び出し元に確認させるには、代わりにOptionalを返します。

私はので、ここで説明Optional<Map>に問題があることを学びました:https://developer.atlassian.com/blog/2015/08/optional-broken

だから、オプションのため@NonNullを追加する地図の種類を返すときに、発信者に余分な明確さを追加するようだが返すすべての機能に必要な、この明快です任意のOptionalタイプですか?

public Optional<Integer> getInt() { 
    return null; 
} 

@NonNull 
public Integer getInt() { 
    return null; 
} 

と同じくらい悪いです私は戻り値の型がOptionalあるとき、それはnullを返すことを悪い習慣であることを考えで正しいですか? (上記の地図の場合またはnullが有効である場合がありますので、あなたが常に@NonNullを追加する必要があります除く?)

結論 私の結論は、これまでOptionalを返すとき@NonNullを追加しないことですし、それができるならばnull@Nullable以上の注釈を付けるには、Optionalタイプを返さないでください。

+0

"空"を返すのではなく、nullを返すのが正しいかどうかを説明できますか? –

+3

'Optional'を返すと約束しても、' null'を返すと契約が破られます。単に 'null'を返さないで、' Optional.empty() 'を返してください。追加の注釈は必要ありません。 – dehasi

+0

@DaleWilsonの詳細については、developer.atlassianのリンクを参照してください。 –

答えて

0

ご意見ありがとうございます。それは私の理解がコメントと並んでいるようです。

Optionalは「約束した」されnullを返す一般悪いとして受け入れているようです。

私は、Optionalが設計した目的に基づいて完全に同意します。

しかし ...私たちはOptionalを返すときに、あなたがnullを返すべきではないこと、それが明示的にクリアすることによりOptionalのドキュメントの不足のために、このため、当社のドキュメントに特別な注意をしなければならなかったしています。

関連する問題