JDK 1.7 破坏了向后兼容性?(泛型)
我发现类似的主题,但过于复杂,并不完全相同。事情是这样的。这是(最小)代码,在1.6上很好,但不能用1.7 javac编译。
public class Test {
private static class A<T>{};
private static class B{};
private static class C{};
B doSomething(A<B> arg){
return new B();
}
C doSomething(A<C> arg){
return new C();
}
}
在 1.7 上,错误是这样的:
java: name clash: doSomething(Test.A<Test.C>) and doSomething(Test.A<Test.B>) 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