Java-Note-浅析Java泛型采用类型擦除的实现方式的原因
作者:
1nfinity | 来源:发表于
2018-11-15 18:20 被阅读0次
- 泛型的类别有两种:
- 真泛型: 在源码, 中间语言, 运行期的Common Language Runtime中都存在, 且在运行期间有自己的虚方法表和数据类型. 这种类别的实现方式是类型膨胀. 如C#;
- 伪泛型: 只在源码中存在, 在中间语言(如字节码)中被替换成原生类型(如 ArrayList为原生类型, ArrayList<String>为具体类型). 这种类别的实现方式是类型擦除. 如Java;
- Java选择类型擦除这种实现方式主要是为了支持迁移兼容性, 使类库按照它们自己的步调变成泛型, 并且这样做不会破坏依赖它的代码和应用程序
- 举个例子:
-
jdk1.4下的List类的get方法是这样的:
listget1.4.png
-
jdk1.5下的List类的get方法是这样的:
listget1.5.png
- 假设我们要获取List对象中的一个String, 在jdk1.4下调用get方法返回的是Object, 程序员需要在客户端中手动进行类型转换如: (String)get(...), 而当List类转变为泛型类后, 无需对客户端进行任何改动, 程序照常运行, 虽然(String)会变成多余的, 但不会对程序的运行产生任何影响
本文标题:Java-Note-浅析Java泛型采用类型擦除的实现方式的原因
本文链接:https://www.haomeiwen.com/subject/fwxufqtx.html
网友评论