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

问题描述 投票:0回答:4

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

java generics
4个回答
5
投票

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

例如,

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

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

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


1
投票

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

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


0
投票

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.