gpt4 book ai didi

java - 为什么类型变量在java中是不可具体化的类型

转载 作者:搜寻专家 更新时间:2023-10-30 21:10:28 24 4
gpt4 key购买 nike

我目前正在学习 Java 泛型,下面是 Java 中不可具体化的类型列表。

如果类型是以下之一,则该类型不可具体化:

• 类型变量(例如 T )

• 具有实际参数的参数化类型(例如 List<Number>, ArrayList<String>, or Map<String, Integer> )

• 具有边界的参数化类型(例如 List<? extends Number> or Comparable<? super String> )

我理解为什么带实际参数的参数化类型和带绑定(bind)的参数化类型是不可引用的,因为在运行时删除之后,唯一剩下的类型信息是 List ,但为什么类型变量(例如 T )是不可具体化的类型?我想在运行时,类型删除后,T会变成Object (给定 T 是未绑定(bind)的类型参数),因此类型信息可用。

我的理解有问题吗?

最佳答案

如果一个对象的类型信息在编译时没有丢失,那么这个对象就是可具体化的。不可具体化的对象不允许进行某些操作。例如,我们不能做一个instance of.

泛型是不可具体化的,这就是我们不能这样做的原因

 List <Conference> instance

这在某些情况下是可行的,但我们不能忘记 JDK 必须从一个版本向后兼容到另一个版本。此约束解释了实现中的一些限制。

如果 Java 类型被表示,则它是可具体化的完全在执行过程中(没有删除类型):

 primitive type
non-parametric type
parametric type in which all arguments of type are unbounded jokers (List <?>)
type "raw" (List)
table whose type of elements is reifiable

关于java - 为什么类型变量在java中是不可具体化的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50903028/

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