如何创建一个空的 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 值类型将被选择以匹配该类型参数类型。
我可以使用 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 值类型将被选择以匹配该类型参数类型。