Scala是否有可能在不改变JVM的情况下拥有已初始化的泛型?
我最近开始学习Scala,并且对它们的泛型也是通过类型擦除实现感到失望(但并不感到惊讶)。
我的问题是,Scala是否有可能拥有已初始化的泛型,或者JVM是否需要以某种方式进行更改?如果JVM确实需要更改,那么究竟需要更改什么?
我最近开始学习Scala,并且对它们的泛型也是通过类型擦除实现感到失望(但并不感到惊讶)。
我的问题是,Scala是否有可能拥有已初始化的泛型,或者JVM是否需要以某种方式进行更改?如果JVM确实需要更改,那么究竟需要更改什么?
否 - 如果 Scala 不支持已初始化的泛型,则该字节码不可能作为 Java 等效字节码运行。
当你问“需要改变什么?”时,答案是:字节码规范。目前,字节码不允许定义变量的参数化类型。已经决定,由于修改字节码以支持已初始化的泛型会破坏向后兼容性,因此必须通过类型擦除来实现泛型。
为了解决这个问题,Scala利用其机制的强大功能定义了一个清单,该清单
可以在任何范围内导入,以便在运行时发现类型信息。清单是实验性的,基本上没有记录,但它们在2.8中作为库的一部分出现。这是关于 Scala reified generics / Manifests 的另一个很好的资源implicit