为什么我们将无限外卡参数化类型称为可再生?

时间:2013-08-23 20:37:10

标签: java generics

我正在阅读AngelikaLangerDoc。差不多三天之后,我正在读它。 在我之前的课程中,我了解到,允许创建unbounded wild card的数组。 我还研究了无界的通配符参数化类型,称为Reifiable types。当我搜索 可再生类型的定义,它声明了一种类型信息在运行时已知的类型 被称为reifiable type。从文章中挑选代码片段。

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

我心中有以下困惑。

  1. 为什么我们说无限外卡参数化类型被称为可再生?
  2. 在上面的示例中,如何知道类型信息?
  3. 我知道这是一个基本问题。我只想回到复习,重新开始 仿制药跟踪。任何人都可以详细说明这个问题吗?

2 个答案:

答案 0 :(得分:4)

从该网站:

  

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

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

答案 1 :(得分:2)

由于Java编译器将所有无界类型参数替换为Object 根据{{​​3}}

  

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

     

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

     

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

     

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

根据Type Erasure

的可改变术语
  

可再现类型是一种类型,其类型信息在运行时完全可用。这包括基元,非泛型类型,原始类型和未绑定通配符的调用。