Java方法重载——歧义

标签 java overloading javac

虽然我正在运行以测试此 thread 中的一些代码我发现了一件奇怪的事情,如果你考虑下面的程序

import java.util.ArrayList;
import java.util.List;

public class OverloadTest {

    public String test1(List l){
        return "abc";
    }

    public int test1(List<Integer> l){
        return 1;
    }

    public static void main(String [] args) {
        List l = new ArrayList();
        System.out.println(new OverloadTest().test1(l));
    }
}

由于字节码删除属性,我原以为 Java 编译器会显示歧义错误,但事实并非如此。现在,当我尝试运行这段代码时,我期待的是 test1(List)将被调用,输出将是 "abc"但令我惊讶的是它叫test1(List<Integer>) (输出为 1 )

我什至试过如下

List l = new ArrayList();
l.add("a");
System.out.println(new OverloadTest().test1(l));

但还是发现Java调用了test1(List<Integer> param)方法和当我检查 param它有 String “a”(Java 是如何将 List<String> 转换为 List<Integer> 的?)

最佳答案

这是一个已修复的错误。 https://bugs.eclipse.org/bugs/show_bug.cgi?id=354229

看起来这个错误存在于 Eclipse 3.7 的 javac5、javac6 和 ecj 中,但它在 Eclipse 3.8 及更高版本中已修复。

关于Java方法重载——歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16378393/

相关文章:

java - Bukkit setItemStackName 不起作用

java - react excel 文件下载损坏

Swift 和 params 方法默认值

c++ - 无法为元组重载模板化运算符,但可以为自定义类型重载

java - 在 gradle 中将参数传递给编译器和 javadoc

java - 服务器不响应时 JAX-WS SOAP 服务卡住

java - array List 重复和排序方法

c# - 为什么运算符方法在 C# 中应该是静态的?

java - 了解 Java 中的最大蒙克?

java - 即使显示为未使用的导入实际上并未在类中使用,编译器警告也会显示