初始问题
我有以下代码:
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
),要么显式转换为任一目标类型(或者完全具有不同的方法名称)。
还请记住:不鼓励使用原始类型,您可能想要参数化泛型集合。
关于java - 有没有一种方法可以在不进行强制转换的情况下解决不明确的方法调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45799302/