使用返回通用列表的方法获取类型列表的调用列表?

时间:2012-03-01 07:57:10

标签: java generics

为什么呢 签名方法:

public void foo(List<String> string)

不能被番石榴召唤:foo(Lists.newArrayList())

或java7s:foo(new ArrayList<>())

2 个答案:

答案 0 :(得分:3)

编译器无法正确推断出Lists.newArrayList()应返回的类型。您可以通过

告诉编译器您想要的类型
foo(Lists.<String>newArrayList());

为什么不能编译推断出类型?考虑这些方法

<T> T newObject();
void bar(Integer i);
void bar(String s);

如果你有bar(newObject()),那么编译器无法确定它应该调用哪个方法。在找到要调用的方法之前,编译器需要知道参数的类型,即使当前只有一种可能的方法。否则,新的重载方法将破坏您的代码。

答案 1 :(得分:0)

因为ArrayList实现了接口List