簡體   English   中英

如何在混合Java版本的世界中使用泛型?

[英]How to use generics in a world of mixed Java versions?

我非常喜歡仿制葯,並盡可能地使用它們。 我偶爾需要在另一個項目中使用我的一個類,它必須在舊的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。 引入仿制葯時,已經提到了很多。 我個人沒有經驗。

你問谷歌嗎? 我的搜索出現了http://www.publicobject.com/glazedlists/documentation/Generics_and_Java_1.4_with_one_codebase.pdf ,這似乎是一個非常有趣的方法。

它的字節碼兼容,它應該與舊的解釋器開箱即用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM