2015-12-29 66 views
-1

我想立即通用類,如SomeContainer<SomeClass>。我只有className,所以,使用java反映,像Class.forNameClass.forName(param).newInstance();但它不支持泛型,我該怎麼辦?如何使用JAVA中的GENERIC類反射即時映射?

+0

好了,你不能。請參閱https://docs.oracle.com/javase/tutorial/java/generics/erasure.html瞭解它背後的原因。此外:您真的想對您正在使用的語言功能做一些事先研究。 – GhostCat

+0

實際上,我知道它,但是我想將通用對象序列化爲json,並將json反序列化爲原始對象,但是在反序列化結束時,它只是具有泛型類的類名,怎麼辦? – Tony

回答

1

泛型在編譯時只是語法糖,它允許Java更好地檢查類型的用法並避免強制轉換。在運行時,泛型不是真的存在。所以例如List<String>List<Integer>都只是運行時的List的實例。

要回答你的問題:

final Object o = Class.forName("java.util.List").newInstance(); 
final List<String> list = (List<String>) o; 
+0

實際上,我知道它,但是我想將通用對象序列化爲json,並將json反序列化爲原始對象,但是在反序列化結束時,它只是具有泛型類的類名稱,該怎麼辦? – Tony