IKVM.net不支持泛型(类型参数)吗?

时间:2009-09-25 12:32:38

标签: c# java generics type-erasure ikvm

我静态编译了一个使用泛型的Java库,比如Collection<?>,但是发出的.NET dll只使用Collection,而不是类型参数。怎么会?

1 个答案:

答案 0 :(得分:6)

Java泛型由Java编译器处理,并在编译时转换为非泛型版本。这与.NET不同,其中CLR具有对类型参数的一流支持。在字节码级别,ArrayList<T>只是一个简单的ArrayList

引用Java docs

  

泛型由Java编译器实现为名为 erasure 的前端转换,这是将使用泛型的代码转换或重写为非泛型代码的过程(即映射新的当前JVM规范的语法)。 换句话说,此转换会删​​除所有通用类型信息;尖括号之间的所有信息都将被删除。例如,LinkedList<Integer>将变为LinkedList。其他类型变量的使用将替换为类型变量的上限(例如,Object),并且当结果代码的类型不正确时,将插入适当类型的强制转换。