Java 泛型 Java使用泛型的意义
@author ixenos
直接意义
在编译时保证类型安全
根本意义
a) 类型安全问题源自可复用性代码的设计,泛型保证了类型安全的复用模板
b) 使用复用性模板时不用手动强制类型转换
三种泛型实现方式的优缺点
- C++:模板方式实现,在编译时完全展开并且支持偏特化,类型精度高,代码共享差;
- Java 5:擦除方式实现,仅用于编译时类型检查,在运行时擦除,向后兼容性好,代码共享好,类型精度非常差;
- C# 2.0:混合方式实现,在运行时展开特化,类型精度高,代码共享还行。
- 模板方式就是对应每一种类型都生成特定的模板,一个泛型类将有多个模板
- 擦除方式就是对应所有泛型类型信息在编译时擦除,一个泛型类只有一个模板
Q:Java为什么采用类型擦除?
A:为了向后兼容(指二进制层面的向后兼容性,而非源码上的)
具体请参考:Reifiable generics与Type erasure generics各有怎样的优点与缺点?
java 泛型擦除发生在哪个阶段,如何用反编译工具查看泛型擦除后的代码?