Java 8 のゲッターはオプション型を返す必要がありますか? 質問する

Java 8 のゲッターはオプション型を返す必要がありますか? 質問する

OptionalJava 8 で導入された型は、多くの開発者にとって新しいものです。

Optional<Foo>従来の方法の代わりに型を返す getter メソッドはFoo良い方法でしょうか? 値が であると仮定しますnull

ベストアンサー1

もちろん、人々は自分のやりたいことをするでしょう。しかし、この機能を追加したとき、私たちには明確な意図がありました。それは、多くの人が望んでいたように、汎用の Maybe 型にすることではありませんでした。私たちの意図は、ライブラリ メソッドの戻り値の型に、"結果なし" を表す明確な方法が必要で、nullそのような場合に使用するとエラーが発生する可能性が非常に高い場合に、限定されたメカニズムを提供することでした。

たとえば、結果の配列や結果のリストを返すものには決して使用しないでください。代わりに、空の配列またはリストを返します。何かのフィールドやメソッド パラメーターとして使用しないでください。

これをゲッターの戻り値として日常的に使用するのは明らかに過剰使用だと思います。

Optional には、避けるべき問題は何もありません。ただ、多くの人が望んでいるものではないため、私たちは、熱心に使いすぎることのリスクをかなり懸念していました。

(公共サービス発表: null にならないことが証明できない限り、を絶対に呼び出さないでください。代わりに、やなどの安全なメソッドのいずれかを使用してください。振り返ってみると、や のようなものを呼び出して、これが の目的全体を台無しにする非常に危険なメソッドであることをはるかに明確にすべきでした。教訓を得ました。(更新: Java 10 には があり、これは と意味的には同等ですが、名前の方が適切です。))Optional.getorElseifPresentgetgetOrElseThrowNoSuchElementExceptionOptionalOptional.orElseThrow()get()

おすすめ記事