java JDK 1.7打破了向后兼容性?(仿制药)
我发现了类似的话题,但过于复杂,不太一样。事情就是这样。下面是在1.6上可以使用的(最小)代码,但不是用1.7javac编译的
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.043
- JDK1。7 javac版本:1.7.0_25
共 (0) 个答案