4

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

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

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

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

有任何想法吗??

4

2 回答 2

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);
于 2013-10-23T16:08:23.527 回答
-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);
于 2013-10-23T16:09:31.500 回答