最初的问题

我有以下代码:

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),或显式转换为任一目标类型(或完全具有不同的方法名称)。

还要记住:不鼓励使用原始类型,您可能希望对通用集合进行参数化。

10-08 01:41