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

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

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

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

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

有帮助吗?

解决方案

您需要使用 Retroweaver 等内容来实现此类目标。关于这个问题的其他答案略有误导。泛型是与以前版本兼容的字节码,但并非完全(如果您不相信我,请参阅java.lang.reflect.Type)。此外,还存在字节码版本属性的问题,该属性将阻止针对1.5编译的类在先前版本上运行。 Retroweaver解决这两个问题,同时还启用其他Java 5功能,如注释和枚举。

其他提示

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

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

您可以查看retroweaver。引入仿制药时,已经提到了很多。我个人没有经验。

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

它的字节码兼容,它应该与旧的解释器一起开箱即用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top