2013-10-23 101 views
4

如何查找通過泛型參數的類的構造函數。例如,這樣一類:查找具有通用參數的構造函數

class myClass<T> { 
    public myClass(T val1, Long val2 String val3){ 
     ... 
    } 
} 

使用通常的反射方法getConstructor()缺乏適當的參數:

Constructor<?> myConstructor = myClass.class.getConstructor(??what here??, Long.class, String.class); 

任何想法??

回答

6

對象的類型是:Object.class

因爲泛型類型擦除,有沒有其他可用的更具體的類型。

更多的好東西在這裏:get-type-of-a-generic-parameter-in-java-with-reflection

例如,對於

public class Bar<T> { 
    private T t; 

    public Bar(T t) { 
     this.t = t; 
    } 

    @Override 
    public String toString() { 
     return t.toString(); 
    } 
} 

這將返回 「富」:

Class<?>[] paramArray = {Object.class}; 
Constructor<?> myConstructor = Bar.class.getConstructor(paramArray); 
String foo = "foo"; 
Bar myBar = (Bar) myConstructor.newInstance(foo); 
System.out.println(myBar); 
-1

這是相當直截了當。

Constructor<T> myConstructor = myClass.class.getConstructor(T val, Long.class, String.class); 

如果你想有一個字符串,它看起來像這樣:

Constructor<String> myConstructor = myClass.class.getConstructor(String val, Long.class, String.class); 

如果你想要一個整型,它看起來像這樣:

Constructor<int> myConstructor = myClass.class.getConstructor(int val, Long.class, String.class); 
+0

整數不能用作通用的,你必須使用Integer。最後一個例子是構造函數 ... – LadyCailin

+0

你測試過這段代碼嗎?這是否甚至編譯:'myClass.class.getConstructor(String val,Long.class,String.class);'? –

相關問題