GuavaのOptional
型をメソッドの引数として使用する際の問題の1つは、単純に記述できないことです。
// method declaration
public void foo(Optional<String> arg);
// compiler error
foo(Optional.absent());
型推論が失敗したためですが、代わりに型を明示的に追加する必要があります。
// real method call
foo(Optional.<String> absent());
どうすればそれを回避できますか?
Optional<>
型の小さなセット(たとえば、ほとんどが文字列または他のいくつかの型)を扱っている場合は、type引数をバインドするヘルパーメソッドをいくつか作成するだけです。
public final class AbsentValues {
public static Optional<String> absentString() {
return Optional.<String>absent();
}
}
これらを静的にインポートして、よりクリーンなコードを作成することもできます。
import static AbsentValues.*;
...
foo(absentString());
あまり一般的ではないOptional<>
タイプの場合は、type引数を明示的に指定するだけです。きれいではないかもしれませんが、正しいです。