找到具有泛型参数的构造函数

时间:2013-10-23 16:05:56

标签: java reflection

如何找到传递泛型参数的类的构造函数。例如这样一个类:

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

使用通常的反射方法getConstructor()缺少适当的参数:

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

任何想法??

2 个答案:

答案 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);