Car*_*erg 7 c# java generics ikvm type-erasure
我静态地重新编译了一个使用泛型的Java库,比如Collection<?>,但是发出的.NET dll只使用Collection而不是类型参数.怎么会?
Java泛型由Java编译器处理,并在编译时转换为非泛型版本.这与.NET不同,其中CLR具有对类型参数的一流支持.在字节码级别,ArrayList<T>只是一个简单的ArrayList.
引用Java文档:
泛型由Java编译器实现为称为擦除的前端转换,这是将使用泛型的代码转换或重写为非泛型代码(即,将新语法映射到当前JVM规范)的过程.换句话说,这种转换会删除所有通用类型信息; 尖括号之间的所有信息都将被删除.例如,
LinkedList<Integer>将成为LinkedList.其他类型变量的使用将替换为类型变量的上限(例如,Object),并且当结果代码的类型不正确时,将插入适当类型的强制转换.
| 归档时间: |
|
| 查看次数: |
2092 次 |
| 最近记录: |