我发现了类似的话题,但是过于复杂,并不完全一样.所以事情就是这样.这是(1.6)最好的(最小)代码,但是不能用1.7
javac编译.
public class Test {
private static class A{};
private static class B{};
private static class C{};
B doSomething(A arg){
return new B();
}
C doSomething(A arg){
return new C();
}
}
在1.7的错误是这样的:
java: name clash: doSomething(Test.A) and doSomething(Test.A) have the same erasure
我了解类型擦除,为什么它是一个错误的代码.我只是不明白为什么我们可以在1.6项目中编译和运行这个代码,当时有1.7的问题.哪里不对?它是1.6编译器中的一个错误,它允许我们这样做吗?除了重写之外,是否有可能在1.7中工作?
> JDK1.6 javac版本:1.6.0_43
> JDK1.7 javac版本:1.7.0_25