5

我正在阅读AngelikaLangerDoc。时隔将近三天,我正在阅读它。在我之前的课程中,我了解到,unbounded wild card允许创建数组。我还研究了无界通配符参数化类型称为Reifiable types. 当我搜索 reifiable 类型的定义时,它指出,类型信息在运行时已知的类型称为reifiable type. 从文章中选择一个代码片段。

Pair<?,?>[] iniPair = new Pair<?,?>[10];

我有以下困惑。

  1. 为什么我们说无界通配符参数化类型称为reifiable?
  2. 在上面的示例中,如何知道类型信息?

我知道这是一个基本问题。我只是想复习一下,回到泛型的轨道上。谁能详细说明这个问题?

4

2 回答 2

5

从那个网站:

Java 中的可具体化类型只是那些具体化不会产生影响的类型,即不需要类型参数的任何运行时表示的类型

通配符参数中没有类型信息,因此擦除不会丢失任何内容。

于 2013-08-23T20:39:51.020 回答
4

由于 Java 编译器将所有无界类型参数替换为Object.
根据类型擦除

为了实现泛型,Java 编译器将类型擦除应用于:

1.如果类型参数是无界的,则将泛型类型中的所有类型参数替换为其边界或对象。因此,生成的字节码只包含普通的类、接口和方法。

2. 必要时插入类型转换以保持类型安全。

3.生成桥接方法以保留扩展泛型类型中的多态性。

根据Javadoc的术语 Reifiable

可具体化类型是其类型信息在运行时完全可用的类型。这包括原语、非泛型类型、原始类型和未绑定通配符的调用。

于 2013-08-23T20:47:20.067 回答