gpt4 book ai didi

java - 为什么Java声称1.5版本需要向后兼容?

转载 作者:行者123 更新时间:2023-12-01 07:17:17 25 4
gpt4 key购买 nike

Java 1.5 与泛型一起发布,他们希望它能够向后兼容早期版本,因此 Java 不允许在创建原始实例时使用特定于方法的泛型。

例如,

class A<T> {
<U> U myMethod(U u) {
return u;
}
}

如果我这样做,

A a = new A();

a.myMethod 会要求我传递 Object 作为输入,它的返回类型是 Object。显然,类类型参数“T”与 myMethod() 特定泛型“U”并不冲突。但不知何故,java 说,为了处理向后兼容性,他们删除了原始实例的所有泛型的使用。

上面的问题被其他人多次问到,所有的答案都围绕着说,因为与早期版本的向后兼容性,java不允许它。 [点]。

但是没有一个答案提供了一个实例,如果 java 允许对原始实例使用特定于方法的泛型,那么在早期版本中可能会失败。

如果他们允许的话,任何人都可以通过提供一个在 1.5 之前的早期版本中出现问题的具体实例来提供帮助吗?

请不要提供任何其他没有与可能失败的问题相关的答案的 stackoverflow 问题。

最佳答案

考虑一个为使用 Java 1.5 之前的 Java 集合类型而编写的 Java 程序。

在 Java 1.5 之前,我会这样写

 List l = new ArrayList();
l.append("Hello");
l.append("World");
String hello = (String) l.get(0);

现在有了类型删除模型,我可以在 Java 1.5 或更高版本中编译该代码......甚至没有编译器警告。但我也可以以现代方式使用完全相同的集合类;例如

 List<String> l = new ArrayList<>();
l.append("Hello");
l.append("World");
String hello = l.get(0);

请注意,我在两个示例中使用相同的类和接口(interface)。

如果没有删除模型来掩盖裂缝,Java 设计者将不得不为集合创建一组并行的类和接口(interface);即

  • 1.5 之前的集合,没有泛型和类型参数
  • 具有泛型和类型参数的 1.5 后集合

由于 Java 类型等效性基于类型名称/标识,而不是基于签名(或鸭子类型)等效性,因此这两个集合层次结构将不兼容。这意味着使用集合的 API 和实现需要在 1.5 之前的集合和 1.5 之后的集合之间进行选择。混合它们会很尴尬......而且效率低下。

对于需要使用旧版 Java 库和应用程序的个人/组织来说,最终结果将是一个大问题。基本上,迁移到 Java 1.5 意味着需要对运行良好的应用程序进行大量重写。这会扼杀泛型,以及 Java 作为一种企业语言。

<小时/>

我们无法为您提供具体的示例,这些示例可能无法在泛型基于模板和/或没有删除的 Java 语言中工作。

  • 假设的 Java 语言并不存在。
  • 只要开发人员付出足够的努力,任何 1.5 版之前的 Java 程序都可以移植到这种语言。

关于java - 为什么Java声称1.5版本需要向后兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56496549/

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