是否有任何计划让JVM在运行时支持泛型?

时间:2010-10-22 15:42:37

标签: java generics

你知道,就像CLR一样。有人甚至承认缺乏运行时通用信息是一个问题,并努力解决它?

4 个答案:

答案 0 :(得分:3)

Java的设计者选择此解决方案来保持向后兼容性(在字节码级别)。从那时起,存在更多的Java代码,因此破坏向后兼容性会产生更糟糕的后果。所以我怀疑他们会改变他们的想法。

答案 1 :(得分:2)

  

为什么这是一个问题(从评论到您的问题)

好吧,例如,考虑不能重载这样的方法:

void foo(List<String> strings) { ... }
void foo(List<Integer> ints) { ... }

即使实际允许这样做也是有意义的。 (这在今天不起作用的主要原因是因为在编译为字节码时,它看起来像foo(List strings)foo(List ints)。)

  

JVM是否有计划在运行时支持泛型?

根据this page,它至少不在Java 7的管道中:

  

Reified Generics

     

目前,泛型是使用擦除实现的,这意味着泛型类型信息在运行时不可用,这使得某些代码难以编写。泛型以这种方式实现,以支持向后兼容旧的非通用代码。 Reified泛型将使运行时的泛型类型信息可用,这将破坏传统的非泛型代码。但是,Neal Gafter建议只在指定的情况下使类型可以恢复,以免破坏向后兼容性。

<强>链接

答案 2 :(得分:1)

我相信有人(可能是马克莱因霍尔德)今年在JavaOne上说他们可能会尝试在未来使用Java来更新泛型。这肯定不会比Java 9更快,并且会有很多潜在的问题需要解决,这将是一个巨大的变化。

答案 3 :(得分:0)

问题可以在没有JVM更改的情况下部分解决:在Scala(在JVM上运行)中,您可以添加所谓的Manifests,其中包含通用的运行时类型信息参数。我认为这个解决方案可以适应Java而不会有太多麻烦。它并不完美,但可能更容易实现为“真实的东西”。

相关问题