2012-03-01 102 views
1

如何創建T類?Java T初始化

我需要從對象T的一些Windows通訊基礎(WCF)的XML綁定

我可以做到這一點沒有錯誤:

ArrayList<T> list = new ArrayList<T>(); 

這是我的函數:

public static <T> ArrayList<T> GetListFromXml(String url,String element) 

如何獲得:T obj =?

+0

您是否通過[Java泛型教程](http://docs.oracle.com/javase/tutorial/java/generics/)工作? – 2012-03-02 09:18:31

回答

3

這是不可能的,因爲編譯器的type erasure。如果你有一個具體的類型與發送方默認構造函數,下面可能工作:

public static <T> ArrayList<T> GetListFromXml(String url,String element, Class<? extends T> type) { 
    T obj = type.newInstance(); 
    ... 
} 

如果需要傳遞參數的構造函數,你必須通過getConstructor(parameter type 1, ...)從類得到它(你需要處理此處未顯示的例外情況):

MyParamType1 param1 = ...; 
MyParamType2 param2 = ...; 
Constructor<T> cons = type.getConstructor(MyParamType1.class, MyParamType2.class); 
T obj = const.newInstance(param1, param2); 
+0

'ArrayList ycList = GetListFromXml(url,element,YourClass.class);'。 [類文字](http://stackoverflow.com/questions/2160788/what-is-a-class-literal-in-java)。 – Mersenne 2012-03-01 15:30:19

+0

我可以向參數發送參數嗎? – 2012-03-01 15:44:54

+0

@ user1194088您可以將該類型作爲參數發送給需要參數的類。如果你寫一個。 ArrayList不帶一個類型。 – 2012-03-01 15:47:34