62

Optional は、null 許容オブジェクトを表すために使用されます。このクラスの用途には次のものがあります。


  1. 使用可能な値がないことを示すために null を返す代わりに、メソッドの戻り値の型として

  2. 「不明」(たとえば、マップに存在しない) と「値がないことがわかっている」(マップに存在し、値がOptional.absent()である)を区別するため
  3. null をサポートしないコレクション内のストレージの null 許容参照をラップするには (最初に検討する必要がある他のアプローチがいくつかあります)。

最初のケースでは、すべての nullable return メソッドで Optional を返す必要がありますか?

4

3 に答える 3

8

Guava と比較して、厄介な問題の 1 つjava.util.Optionalは、次のようなメソッドを提供しないことです。

orElse(Optional<T>): Optional<T>

一方、これは次のように定義されcom.google.common.base.Optionalています

or(Optional<T>): Optional<T>

この特定の機能がないため、Java 8 の Optional のモナディック アプリケーションが制限されます。

アップデート:

Guavaor(Optional<T>)は、Java 8 Optional のように複製できます。

optionalA.map(Optional::of).orElse(optionalB)

また

optionalA.map(Optional::of).orElseGet(() -> computeOptionalB)

アップデート:

Java 9 (ついに!)では、以下を使用できるようになりますOptional.or(Supplier<Optional<T>>)

optionalA.or(() -> computeOptionalB)

それはいいですね!

于 2014-10-19T01:24:38.883 に答える