为什么一个班级有效而另一个班级没有?

lac*_*547 3 java eclipse generics overloading

如您所见,具有非void返回类型非常重要.

class TestValid {

public String f(List<String> list) {
    return null;
}

public Integer f(List<Integer> list) {
    return null;
}

public void test() {
    f(Arrays.asList("asdf"));
    f(Arrays.asList(123));
}

}

class TestInvalid {

public void f(List<String> list) {
    System.out.println("strings");
}

public void f(List<Integer> list) {
    System.out.println("numbers");
}

}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 7

TestValid 无效开头:

TestValid.java:9: name clash: f(List<Integer>) and f(List<String>)
have the same erasure
public Integer f(List<Integer> list) {
               ^
Run Code Online (Sandbox Code Playgroud)

所以返回类型是红鲱鱼.如果返回类型是考虑到在确定超载的签名,那么它是有效的,但目前它是无效的,因为这:

// Equally invalid
public Integer f() {}
public String f() {}
Run Code Online (Sandbox Code Playgroud)

如果你真的设法TestValid编译,我有兴趣知道你正在使用哪个编译器.