我该如何创建一个空的Guava ImmutableList?

27
我可以使用of方法创建一个Guava不可变列表,并且将根据传递的对象获取正确的泛型类型。
Foo foo = new Foo();
ImmutableList.of(foo);

然而,没有参数的of方法无法推断泛型类型并会创建一个ImmutableList<Object>

我该如何创建一个空的ImmutableList以满足List<Foo>

3个回答

47

如果将创建的列表分配给变量,您就不必做任何事情:

ImmutableList<Foo> list = ImmutableList.of();
在其他无法推断类型的情况下,你必须像@zigg所说的那样编写ImmutableList.<Foo>of()

18

@Robino 当然,那是因为我立即回答了自己的问题。ColinD的回答仍然很有帮助,我认为很有价值。 - zigg

3
自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 之前,只有方法的参数用于类型参数推断。(大多数情况下,只有赋值是例外。)

在这种情况下,test 的参数类型将成为 of() 的目标类型,of 的返回值类型将被选择为与该参数类型匹配。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接