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

Java编译器是否有非类型擦除泛型扩展作为第三方编译器扩展?,java,generics,compiler-construction,Java,Generics,Compiler Construction,我对类型擦除Java泛型的限制越来越失望。我想知道是否有一个定制的Java编译器提供了一个完整版本的泛型,而没有与类型擦除相关的怪癖 Chris这不仅仅是需要修改编译器。我认为还需要以与JVM规范不兼容的方式更改JVM实现,并以与当前API不兼容的方式更改Java类库 例如,checkcast指令的语义会发生显著变化,Object.getClass()操作返回的对象也会发生变化 简言之,最终结果将不再是“Java”,绝大多数Java开发人员对其兴趣不大。任何使用新工具/JVM/库开发的代码都会受

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


Chris

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

例如,
checkcast
指令的语义会发生显著变化,Object.getClass()操作返回的对象也会发生变化

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


现在,如果Sun/Oracle提议/做出这一改变。。。这会很有趣。

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

(一种运行在JVM之上的语言)可能允许您使用强大的概念,即


更多信息:

这是可行的,但我还不知道有谁做过。它需要对javac进行重大重写,使其在需要时实例化泛型(为每个实例化创建一个新的.class文件),但在其他方面应该是相当直接的。它甚至可以添加对使用基本类型作为泛型类型参数的支持。

这样的东西怎么可能实现为库呢?我不知道你如何避免修改编译器和虚拟机。发布你想做什么,你到目前为止做了什么,也许我们可以进一步帮助你。在大多数情况下,类型擦除是可能的。“Scala对隐式参数的支持,以及编译器对清单的自动注入,使得在JVM上具体化类型稍微不那么痛苦。”