如何找到传递泛型参数的类的构造函数。例如这样一个类:
class myClass<T> {
public myClass(T val1, Long val2 String val3){
...
}
}
使用通常的反射方法getConstructor()
缺少适当的参数:
Constructor<?> myConstructor = myClass.class.getConstructor( ??what here??, Long.class, String.class);
任何想法??
答案 0 :(得分: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();
}
}
这将返回“foo”:
Class<?>[] paramArray = {Object.class};
Constructor<?> myConstructor = Bar.class.getConstructor(paramArray);
String foo = "foo";
Bar myBar = (Bar) myConstructor.newInstance(foo);
System.out.println(myBar);
答案 1 :(得分:-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);
如果你想要一个int,它看起来像这样:
Constructor<int> myConstructor = myClass.class.getConstructor( int val, Long.class, String.class);