1. ホーム

[解決済み】Java 8のゲッターはオプションの型を返すべきですか?

2022-04-16 20:40:31

質問

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

を返すゲッターメソッドですか? Optional<Foo> 型の代わりに Foo は良い習慣ですか?値が可能であると仮定します。 null .

解決方法は?

もちろん、人々は自分の好きなようにするでしょう。 しかし、私たちはこの機能を追加する際に、明確な意図を持っていました。 ではなく 多くの人がそうして欲しいと思うほど、汎用のMaybe型にすることです。 私たちの意図は、ライブラリ メソッドの戻り値の型に限定したメカニズムを提供することで、「結果なし」を表す明確な方法が必要なときに null というのは、圧倒的にエラーの可能性が高かったからです。

例えば、結果の配列やリストを返すようなものには、おそらく決して使用しないでください。 また、何かのフィールドやメソッドのパラメータとして使うこともほとんどないでしょう。

ゲッターの戻り値として日常的に使うのは、間違いなく使いすぎだと思います。

何もない いけない オプティカルは避けるべきですが、多くの人がそうであってほしいと願っているわけではありません。

(公共サービスのお知らせです。 ネバー コール Optional.get のような安全なメソッドを使用します。 orElse または ifPresent . 今にして思えば、私たちは get のようなものです。 getOrElseThrowNoSuchElementException の目的を根底から覆す非常に危険な方法であることを、もっと明確にする必要があります。 Optional ということです。 教訓です。 (UPDATE: Java 10では Optional.orElseThrow() と意味的に同じです。 get() しかし、その名前はより適切である)) 。