我越来越对类型擦除的Java泛型的限制越来越感到沮丧。我想知道是否有一个自定义Java编译器提供了完整版本的泛型而没有与类型擦除相关的怪癖?
克里斯
答案 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的支持。