2013-10-23 39 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);'? –

相关问题