我最近开始学习 Scala,很失望(但并不惊讶)他们的泛型也是通过类型删除实现的。
我的问题是,Scala 是否有可能具有具体化的泛型,或者 JVM 是否需要以某种方式进行更改?如果JVM确实需要改变,究竟需要改变什么?
最佳答案
否 - 如果该字节码不支持具体化的泛型,Scala 就不可能作为与 Java 等效的字节码运行。
当你问“需要改变什么?”,答案是:字节码规范。目前,字节码不允许定义变量的参数化类型。已决定作为对字节码的修改以支持具体化的泛型将 break backwards compatibility , 那 generics would have to be implemented via type erasure .
为了解决这个问题,Scala 利用其 implicit
机制的强大功能定义了一个 Manifest
,它可以在任何在运行时发现类型信息的范围。 list 是实验性的,大部分没有记录,但它们 are coming as part of the library in 2.8 .这是 Scala reified generics / Manifests 上的另一个好资源
关于java - Scala 是否有可能在不更改 JVM 的情况下实现泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1357906/