最初的问题
我有以下代码:
public static void main(String[] args) throws Exception {
test(new LinkedList());
}
public static void test(Queue qeueue){
System.out.println("Queue");
}
public static void test(List list){
System.out.println("List");
}
InteliJ不允许我运行该项目。
有什么办法可以解决此问题?
如果两者的特异性相等,那么JVM将使用这两个中的哪一个?它是随机的吗?
我已经阅读了相关的SO q / a,但是没有人给出如何围绕它进行编译的答案。
他们只列出了原因,例如Ambiguous method call intelliJ 15
更新资料
一个更讨厌的例子是:
test(null);
我一直在阅读非常有趣的文章:http://javabypatel.blogspot.be/2016/05/ambiguous-method-overloading.html
最佳答案
一个LinkedList
既是List
又是Deque
,而后者又是Queue
。
因此,test
方法调用对于编译器来说是模棱两可的,因为无法确定要调用的重载。
合并方法以接受唯一对象(例如Collection
),或显式转换为任一目标类型(或完全具有不同的方法名称)。
还要记住:不鼓励使用原始类型,您可能希望对通用集合进行参数化。