java - 有没有一种方法可以在不进行强制转换的情况下解决不明确的方法调用?

标签 java generics intellij-idea overloading

初始问题

我有以下代码:

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 不允许我运行该项目。

  1. 有什么办法可以解决这个问题吗?
  2. 如果两者的特异性相同,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/

相关文章:

java - 如何从带有哈希值的 angularjs URL 从 UriComponentsBuilder 构建 URI

java - JVM 只映射堆栈页吗?

java - 由于 Java 泛型,我无法编译 Guava 的缓存构建器

java - Android Studio自动生成getters和setters时如何同时生成注释

git - 无法在 github 上共享来自 intellij 的项目

java - 如何在java类中打开Assets文件夹中的文件

rest - 如何在 Go 中编写通用处理程序?

java - 如何重新绑定(bind)通配符?

Java如何启动IntelliJ IDEA制作的GUI

java - 确定夏令时 (DST) 在 Java 中是否在指定日期处于 Activity 状态