20

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

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

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

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

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

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

4

3 に答える 3

8

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

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

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

import static AbsentValues.*;

...

foo(absentString());

あまり一般的でないOptional<>型については、型引数を明示的に指定するだけです。きれいではないかもしれませんが、正しいです。

于 2014-05-30T16:48:41.377 に答える
-1

したがって、これはこれを行う正しい方法です。他に何もない場合は、少なくとも、私のように質問を読んでいないすべての人のために、将来の参考のためにここに表示させてください:) ColinD(およびAlexey)に感謝します。

foo(Optional.<String>absent())
于 2017-06-26T08:40:45.533 に答える
-4

ちょうど質問を書いているとき、私は

public class GuavaConstants {
    @SuppressWarnings( { "raw" })
    public static final Optional ABSENT = Optional.absent();

    // similar for empty ImmutableList, etc.
}

そして、呼び出しは次のようになります

@SuppressWarnings( { "unchecked" })
foo(GuavaConstants.ABSENT);

より良いアプローチはありますか?

于 2012-08-01T11:09:11.130 に答える