4

我非常喜欢泛型,并尽可能使用它们。时不时地,我需要在另一个项目中使用我的一个类,该项目必须在旧 JVM(5.0 之前)上运行,需要在 JavaME(也不允许泛型)或 Microsoft J#(非常差)上运行支持泛型)。

目前,我手动删除了所有泛型,这意味着也插入了许多强制转换。

由于泛型被认为是仅编译时的,并且每段泛型代码都可能自动转换为非泛型代码,我想知道是否有任何工具可以为我做到这一点。

如果没有这样的工具,我还能如何解决这个问题?我应该完全停止使用泛型吗?

已经有与字节码兼容性相关的答案。如果我出于某种原因需要源代码兼容性怎么办?

4

4 回答 4

5

你需要使用像Retroweaver这样的东西来实现这种事情。这个问题的其他答案有点误导。泛型是一种与以前版本兼容的字节码,但并不完全兼容(看看java.lang.reflect.Type你是否不相信我)。此外,字节码版本属性存在问题,这将阻止针对 1.5 编译的类在以前的版本上运行。Retroweaver 解决了这两个问题,同时还启用了其他 Java 5 特性,如注解和枚举。

于 2008-11-22T20:07:57.573 回答
2

在 Netbeans(我不确定您使用的是什么 IDE)中,您可以将源代码兼容性设置为一组 java 版本 - 只需将其设置为支持泛型的版本。正如已经发布的那样,泛型是与旧 JVM / JRE 版本兼容的字节码,因此它应该可以开箱即用。

于 2008-11-22T18:31:28.783 回答
2

据我所知,Java 5 的字节码与 Java 1.4不兼容。也就是说,您不能将 Java 5 编译的类与早期的 VM 一起使用。

你可以检查逆向编织。这在引入泛型时被提到了很多。我个人没有这方面的经验。

你问谷歌了吗?我的搜索出现了http://www.publicobject.com/glazedlists/documentation/Generics_and_Java_1.4_with_one_codebase.pdf,这似乎是一个非常有趣的方法。

于 2008-11-22T20:07:10.353 回答
-5

它的字节码兼容,它应该可以使用旧的解释器开箱即用。

于 2008-11-22T18:27:50.473 回答