web-dev-qa-db-ja.com

空のGuava ImmutableListを作成するにはどうすればよいですか?

私は Guava ImmutableListofメソッドで作成でき、渡されたオブジェクトに基づいて正しいジェネリック型を取得します。

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

ただし、 パラメータなしのofメソッド はジェネリック型を推測できず、ImmutableList<Object>を作成します。

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

23
zigg

作成したリストを変数に割り当てる場合、何もする必要はありません。

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

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

37
ColinD

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

17
zigg

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

例:

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

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

説明

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

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

2
Lii