web-dev-qa-db-ja.com

Optional.absent()値をメソッドに簡潔に渡す

GuavaのOptional型をメソッドの引数として使用する際の問題の1つは、単純に記述できないことです。

// method declaration
public void foo(Optional<String> arg);

// compiler error
foo(Optional.absent());

型推論が失敗したためですが、代わりに型を明示的に追加する必要があります。

// real method call
foo(Optional.<String> absent());

どうすればそれを回避できますか?

19
Alexey Romanov

Optional<>型の小さなセット(たとえば、ほとんどが文字列または他のいくつかの型)を扱っている場合は、type引数をバインドするヘルパーメソッドをいくつか作成するだけです。

public final class AbsentValues {
    public static Optional<String> absentString() {
        return Optional.<String>absent();
    }
}

これらを静的にインポートして、よりクリーンなコードを作成することもできます。

import static AbsentValues.*;

...

foo(absentString());

あまり一般的ではないOptional<>タイプの場合は、type引数を明示的に指定するだけです。きれいではないかもしれませんが、正しいです。

8
Mike Strobel