是否有作为第三方编译器扩展的Java编译器的非类型擦除泛型扩展?

时间:2010-05-24 00:38:15

标签: java generics compiler-construction

我越来越对类型擦除的Java泛型的限制越来越感到沮丧。我想知道是否有一个自定义Java编译器提供了完整版本的泛型而没有与类型擦除相关的怪癖?

克里斯

4 个答案:

答案 0 :(得分:5)

这不仅仅是需要的编译器更改。我认为还必须以与JVM规范不兼容的方式更改JVM实现,并以与当前API不兼容的方式更改Java类库。

例如,checkcast指令的语义发生了显着变化,Object.getClass()操作返回的对象也必须发生变化。

简而言之,最终结果不再是“Java”,绝大多数Java开发人员都不会感兴趣。使用新工具/ JVM /库开发的任何代码都会受到污染。

现在,如果Sun / Oracle提议/进行此更改...... 会很有趣。

答案 1 :(得分:1)

Scala(一种在JVM之上运行的语言)可以让您使用强大的manifests概念解决类型擦除问题,它基本上为您提供reified types

更多信息:http://www.scala-blogs.org/2008/10/manifests-reified-types.html

答案 2 :(得分:0)

除非您断言JDK编译器没有正确实现该语言,否则问题毫无意义。任何不遵守相同规则的编译器都不是Java编译器,因此没有人可以推荐使用它。

答案 3 :(得分:0)

这是可行的,但我还没有意识到有人已经做到了。它需要对javac进行重大的重写,以便在需要时为其实例化泛型(为每个实例创建一个新的.class文件),否则应该是相当直接的。它甚至可以添加对使用原始类型作为泛型类型args的支持。