我可以使用该方法创建一个GuavaImmutableList
of
,并将根据传递的对象获得正确的泛型类型:
Foo foo = new Foo();
ImmutableList.of(foo);
但是,没有参数的of
方法无法推断泛型类型并创建一个ImmutableList<Object>
.
我怎样才能创造一个空ImmutableList
来满足List<Foo>
?
我可以使用该方法创建一个GuavaImmutableList
of
,并将根据传递的对象获得正确的泛型类型:
Foo foo = new Foo();
ImmutableList.of(foo);
但是,没有参数的of
方法无法推断泛型类型并创建一个ImmutableList<Object>
.
我怎样才能创造一个空ImmutableList
来满足List<Foo>
?
如果将创建的列表分配给变量,则无需执行任何操作:
ImmutableList<Foo> list = ImmutableList.of();
在无法推断类型的其他情况下,您必须ImmutableList.<Foo>of()
按照@zigg 所说的那样编写。
ImmutableList.<Foo>of()
ImmutableList
将创建一个具有泛型类型的空Foo
。尽管编译器在某些情况下可以推断出泛型类型,例如对变量的赋值,但是当您为函数参数提供值时,您需要使用这种格式(就像我所做的那样)。
自 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
将被选择以匹配该参数类型。