gpt4 book ai didi

java - 什么是具体泛型?它们如何解决类型删除问题,为什么不进行重大更改就不能添加它们?

转载 作者:IT老高 更新时间:2023-10-28 13:52:38 25 4
gpt4 key购买 nike

我已阅读 Neal Gafter's关于这个主题的博客,但在许多方面仍不清楚。

在 Java、JVM 和现有集合 API 的当前状态下,为什么不能创建保留类型信息的集合 API 实现?难道这些不能以保留向后兼容性的方式替换 Java future 版本中的现有实现吗?

举个例子:

List<T> list = REIList<T>(T.Class);

REIList 是这样的:

public REIList<T>() implements List {
private Object o;
private Class klass;

public REIList(Object o) {
this.o = o;
klass = o.getClass();
}
... the rest of the list implementation ...

并且方法使用Object o和Class klass来获取类型信息。

为什么保留通用类信息需要更改语言,而不仅仅是更改 JVM 实现?

我不明白什么?

最佳答案

重点在于,编译器中的具体泛型支持保留类型信息,而类型删除泛型则不支持。 AFAIK,首先进行类型删除的全部意义在于实现向后兼容性(例如,较低版本的 JVM 仍然可以理解泛型类)。

您可以像上面那样在实现中显式添加类型信息,但是每次使用列表时都需要额外的代码,而且我认为这很困惑。此外,在这种情况下,除非您自己添加检查,否则您仍然没有对所有列表方法进行运行时类型检查,但是具体化的泛型将确保运行时类型。

关于java - 什么是具体泛型?它们如何解决类型删除问题,为什么不进行重大更改就不能添加它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/879855/

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