【发布时间】:2015-09-24 12:08:05
【问题描述】:
在同一个类中我有两个重载方法:
public static <T> void foo(Collection<T> collection, T valueToAppend);
public static <T> void foo(Collection<T> collection, Collection<T> valueToAppend);
下面的测试应该调用第二种方法:
@Test
public void testFoo() {
ArrayList ftList = Lists.newArrayList();
List<Double> doubleList = Lists.newArrayList(1.0, 2.0);
foo(ftList, doubleList);
}
当我运行测试时,我得到以下编译错误:
对 foo 的引用不明确,path.to.class 中的方法 foo(java.util.Collection,T) 和 path.to.class 中的方法 foo(java.util.Collection,java.util.Collection) 匹配.
我在第二个参数中传递了一个集合,为什么编译器不知道
去第二种方法?
如果我更改方法签名并从第一个参数中删除泛型,我将
没有出现编译错误,这是为什么呢?
【问题讨论】:
-
因为
<T>也可以是Collection.. 这是一个和其他类型一样的类型。 -
Arraylist 不是
Collection<T> -
不相关但不应该是
T valueToAppend? -
你使用了原始类型
ArrayList。我认为这可能会导致问题。
标签: java