为什么呢 签名方法:
public void foo(List<String> string)
不能被番石榴召唤:foo(Lists.newArrayList())
或java7s:foo(new ArrayList<>())
答案 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