25

メソッドを使用してグアバImmutableListを作成ofし、渡されたオブジェクトに基づいて正しいジェネリック型を取得できます。

Foo foo = new Foo();
ImmutableList.of(foo);

ただし、パラメーターのないメソッドofジェネリック型を推測できず、ImmutableList<Object>.

ImmutableList満たすために空を作成するにはどうすればよいList<Foo>ですか?

4

3 に答える 3

42

作成したリストを変数に代入する場合、何もする必要はありません:

ImmutableList<Foo> list = ImmutableList.of();

型を推測できないその他のケースでは、ImmutableList.<Foo>of()@zigg のように記述する必要があります。

于 2015-04-21T15:27:30.130 に答える
18

ImmutableList.<Foo>of()ImmutableListジェネリック型で空を作成しますFoo。コンパイラは、変数への割り当てなど、状況によってはジェネリック型を推測できますが、関数の引数に値を指定する場合は、(私が行ったように) この形式を使用する必要があります。

于 2015-04-21T15:25:21.717 に答える
2

Java 8 以降、コンパイラーははるかに賢く、より多くの状況で型パラメーターのパラメーターを把握できます。

例:

void test(List<String> l) { ... }

// Type checks in Java 8 but not in Java 7
test(ImmutableList.of()); 

説明

Java 8 の新しい点は、式のターゲット型を使用して、その部分式の型パラメーターを推測することです。Java 8 より前は、型パラメーターの推論に使用されるメソッドへの引数のみ。(ほとんどの場合、割り当ては例外です。)

この場合、 のパラメーターの型testが のターゲット型にof()なり、 の戻り値の型がofその引数の型と一致するように選択されます。

于 2017-12-25T13:49:00.557 に答える