我正在通过AngelikaLangerDoc阅读。经过将近三天的时间,我正在阅读它。在上一课中,我了解到unbounded wild card
可以创建的数组。我还研究了称为的无界通配符参数化类型Reifiable types
。当我搜索可更改类型的定义时,它指出,其类型信息在运行时已知的类型称为reifiable type
。从文章中选择一个代码片段。
Pair<?,?>[] iniPair = new Pair<?,?>[10];
Run Code Online (Sandbox Code Playgroud)
我有以下困惑。
我知道这是一个基本问题。我只是想让自己复习一下,重新回到泛型的轨道上。谁能详细说明这个问题?
从那个网站:
Java 中可具体化的类型只是那些具体化不会产生影响的类型,即不需要任何类型参数的任何运行时表示的类型
通配符参数中没有类型信息,因此擦除不会丢失任何内容。
由于 Java 编译器将所有无界类型参数替换为Object
.
根据类型擦除
为了实现泛型,Java 编译器将类型擦除应用于:
1. 将泛型类型中的所有类型参数替换为其边界,如果类型参数无边界,则将其替换为 Object。因此,生成的字节码仅包含普通的类、接口和方法。
2.如果需要保持类型安全,则插入类型转换。
3.生成桥接方法以保留扩展泛型类型中的多态性。
可具体化类型是其类型信息在运行时完全可用的类型。这包括基元、非泛型类型、原始类型和未绑定通配符的调用。
归档时间: |
|
查看次数: |
534 次 |
最近记录: |