Scala是否有可能在不改变JVM的情况下拥有已初始化的泛型?

2022-09-01 14:33:15

我最近开始学习Scala,并且对它们的泛型也是通过类型擦除实现感到失望(但并不感到惊讶)。

我的问题是,Scala是否有可能拥有已初始化的泛型,或者JVM是否需要以某种方式进行更改?如果JVM确实需要更改,那么究竟需要更改什么?


答案 1

否 - 如果 Scala 不支持已初始化的泛型,则该字节码不可能作为 Java 等效字节码运行。

当你问“需要改变什么?”时,答案是:字节码规范。目前,字节码不允许定义变量的参数化类型。已经决定,由于修改字节码以支持已初始化的泛型会破坏向后兼容性,因此必须通过类型擦除来实现泛型

为了解决这个问题,Scala利用其机制的强大功能定义了一个清单,该清单可以在任何范围内导入,以便在运行时发现类型信息。清单是实验性的,基本上没有记录,但它们在2.8中作为库的一部分出现。这是关于 Scala reified generics / Manifests 的另一个很好的资源implicit


答案 2

为了补充oxbow_lakes,Stack Overflow上有一个问题,关于如何绕过Scala中的类型擦除


推荐