如何创建一个空的 Guava ImmutableList?

How do I create an empty Guava ImmutableList?

我可以使用 of 方法创建一个 Guava ImmutableList,并根据传递的对象获得正确的泛型类型:

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

但是,the of method with no parameters 无法推断通用类型并创建一个 ImmutableList<Object>

如何创建一个空 ImmutableList 来满足 List<Foo>

ImmutableList.<Foo>of() 将创建一个具有通用类型 Foo 的空 ImmutableList。尽管 在某些情况下,例如对变量的赋值,当您为函数参数提供值时,您需要使用这种格式(就像我所做的那样)。

如果将创建的列表分配给变量,则无需执行任何操作:

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

在其他无法推断类型的情况下,您必须按照@zigg 所说的写ImmutableList.<Foo>of()

自 Java8 以来,编译器更加聪明,可以在更多情况下计算出类型参数参数。

示例:

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

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

说明

Java8 中的新内容是表达式的 target type 将用于推断其子表达式的类型参数。在 Java 8 之前,只有方法的参数用于类型参数推断。 (大多数时候,作业是一个例外。)

在这种情况下,test 的参数类型将是 of() 的目标类型,of 的 return 值类型将被选择以匹配该类型参数类型。