为什么将这两种方法放在同一个类中是不合法的?
class Test{
void add(Set<Integer> ii){}
void add(Set<String> ss){}
}
Run Code Online (Sandbox Code Playgroud)
我明白了 compilation error
方法add(Set)具有与Test类型中的另一种方法相同的擦除add(Set).
虽然我可以解决它,但我想知道为什么javac不喜欢这个.
我可以看到,在许多情况下,这两种方法的逻辑非常相似,可以用一个方法代替
public void add(Set<?> set){}
Run Code Online (Sandbox Code Playgroud)
方法,但情况并非总是如此.
如果你想要有两个constructors接受这些参数的话,这是非常烦人的,因为那时你不能只改变其中一个的名字constructors.
这是有效的Java吗?
import java.util.Arrays;
import java.util.List;
class TestWillThatCompile {
public static String f(List<String> list) {
System.out.println("strings");
return null;
}
public static Integer f(List<Integer> list) {
System.out.println("numbers");
return null;
}
public static void main(String[] args) {
f(Arrays.asList("asdf"));
f(Arrays.asList(123));
}
}
Run Code Online (Sandbox Code Playgroud)
我的Java理论的理解说没有!
知道JLS对它的评价会很有趣.