で働く Scala 開発者として、Guava へGWT
の の追加を歓迎します。Optional
の最も一般的な使用例の 1 つは、Optional
メソッドからオプションの値を返す場合です ( Guava の Optional クラスのポイントへの回答で示唆されているように) 。
scala では、私はよく次のようなコードを書きます。
def someExpensiveOperation(params: Type): Option[ResultType] = ...
someExpensiveOperation(params).foreach({ val =>
doSomethingWithVal (val)
})
Guava's Option では、次のようなものよりもエレガントなものは許可されていないようです。
Optional<MyType> optionalResponse = someExpensiveOperation(params);
if (optionalResponse.isPresent()) {
doSomethingWithVal(optionalResponse.get())
}
ローカル変数は冗長であり、抽象化できるパターン ( if (optional.isPresent()) { doSomethingWith(optional.get()) }
) を繰り返す必要があります。
もう 1 つのオプションは、Optional
2 回返すメソッドを呼び出すことです。
if (someExpensiveOperation(params).isPresent()) {
doSomethingWithVal(someExpensiveOperation(params).get())
}
しかし、コストのかかる操作を不必要に複数回呼び出すため、これは明らかに望ましくありません。
<T>useIfPresent(Optional<T> val, Closure<? super T> closure)
他の人がこの非常に一般的なケースをどのように処理したか (おそらく? のような静的ユーティリティ メソッドを作成することによって)、または誰かがより洗練された解決策を見つけたかどうかに興味があります。
また、(しかし、より適切な名前が付けられていることを願っています)のようなメソッドが省略された理由を誰かが知っている場合Optional.foreach(Closure<? super T> closure)
は、その理論的根拠を知りたいと思います。