gpt4 book ai didi

java - JDK 1.7 打破了向后兼容性? (泛型)

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:02:30 26 4
gpt4 key购买 nike

我发现了类似的主题,但过于复杂且不太相同。事情是这样的。这是适用于 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

最佳答案

你说得对,在 JLS3 下,这段代码永远不会被编译,这是 1.6 中的一个错误。

在 1.7 版本中,许多底层类型系统都已更新并修复了这个错误,结果是更好的类型处理,但代价是一些向后兼容性问题。

至于让它在 1.7 中运行,我相信重构是您唯一的选择。

关于java - JDK 1.7 打破了向后兼容性? (泛型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20268978/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com