为什么 Java 从 v1.0 开始不支持泛型?
Why did Java not support generics from v1.0?
这不是关于泛型如何在 Java 中工作的问题,而是关于 pre/post Java 5 泛型支持差异、类型擦除等的问题...在中有很多问题SO 和 Internet 中关于这些主题的一般文档。如果你愿意的话,这个问题更多的是关于 Java 语言 archaeology,因为我想知道 Java 中没有包含完整泛型支持的具体原因来自v1.0,我们必须等到 Java 5 才能支持它:
List<String> myList = new ArrayList<String>()
而从 v1.0 开始我们可以这样写:
String[] myArray = new String[]{"some", "random", "strings"}
所以除非我在这里遗漏了一些明显的东西,否则我不明白为什么数组所具有的相同编译时类型安全功能不能扩展到任何其他容器(集合或其他容器),这本来可以拯救我们在未来的岁月里,所有的痛苦。
这是经过深思熟虑的设计决定吗?如果是,基于什么理由?
Was it a deliberate design decision? if so, on what grounds?
我听说的方式1,这个决定是务实的。虽然 Java 团队希望在 Java 1.0 发布之前进一步完善语言,但有一个 "business need" 可以按原样发布 Java。人们认为(当时)有短暂的 window 机会在开发人员面前获得一门新语言。人们认为,如果他们推迟了,对一种新语言的需求可能会被另一种语言/公司所填补。
1 - 我不记得我是从谁那里听到的,但这与您今天在 Java 中看到的一些设计异常是一致的;例如方法命名不一致,类 应该是接口,奇怪的系统。in/out/err 静态,等等。
产品开发通常有生命周期。产品的功能实施需要花费时间进行研究、设计、实施和维护。日复一日,年复一年,产品变得越来越具有新功能。我们不能问为什么早期版本中缺少后来的功能。这是我们的常识,可以给出问题的答案,
为什么石器时代没有发明飞机?
这不是关于泛型如何在 Java 中工作的问题,而是关于 pre/post Java 5 泛型支持差异、类型擦除等的问题...在中有很多问题SO 和 Internet 中关于这些主题的一般文档。如果你愿意的话,这个问题更多的是关于 Java 语言 archaeology,因为我想知道 Java 中没有包含完整泛型支持的具体原因来自v1.0,我们必须等到 Java 5 才能支持它:
List<String> myList = new ArrayList<String>()
而从 v1.0 开始我们可以这样写:
String[] myArray = new String[]{"some", "random", "strings"}
所以除非我在这里遗漏了一些明显的东西,否则我不明白为什么数组所具有的相同编译时类型安全功能不能扩展到任何其他容器(集合或其他容器),这本来可以拯救我们在未来的岁月里,所有的痛苦。
这是经过深思熟虑的设计决定吗?如果是,基于什么理由?
Was it a deliberate design decision? if so, on what grounds?
我听说的方式1,这个决定是务实的。虽然 Java 团队希望在 Java 1.0 发布之前进一步完善语言,但有一个 "business need" 可以按原样发布 Java。人们认为(当时)有短暂的 window 机会在开发人员面前获得一门新语言。人们认为,如果他们推迟了,对一种新语言的需求可能会被另一种语言/公司所填补。
1 - 我不记得我是从谁那里听到的,但这与您今天在 Java 中看到的一些设计异常是一致的;例如方法命名不一致,类 应该是接口,奇怪的系统。in/out/err 静态,等等。
产品开发通常有生命周期。产品的功能实施需要花费时间进行研究、设计、实施和维护。日复一日,年复一年,产品变得越来越具有新功能。我们不能问为什么早期版本中缺少后来的功能。这是我们的常识,可以给出问题的答案,