当构造函数初始化参数时,从泛型类创建实例

时间:2012-10-24 09:04:40

标签: java generics

  

可能重复:
  How to create instance of a class with the parameters in the constructor using reflection?

是否可能发生以及如何发生? 我有一个班级Gerbil

public class Gerbil {
    private int gerbilNumber;
    public Gerbil(int gn){
        this.gerbilNumber = gn;
    }
    public void hop() {
        System.out.println("It's gerbil number" + this.gerbilNumber + "and it's hopping.");
    }

}

我有一个通用类TestGenerics

public class TestGenerics<T> {
    private Class<T> mClass;

    public TestGenerics(Class<T> cls){
        mClass = cls;
    }

    public T get(){
        try{
            return mClass.newInstance();
        }catch(Exception e){
            e.printStackTrace();
            return null;
        }
    }
}

main班级:

public class HelloWorld {
    public static void main(String[] args) {
        TestGenerics<Gerbil> g = new TestGenerics<Gerbil>(Gerbil.class);
        Gerbil a = g.get();
        a.hop();
    }
}

问题是我需要为Gerbil的构造函数提供一个整数值,但不知道如何(如果可能的话)。否则,如果我留下一个空/默认构造函数,代码工作正常,但是当真实类的构造函数需要传递参数时,是否可以使实例形成泛型类?

1 个答案:

答案 0 :(得分:10)

试试这个:

public T get(){
    try{
        return mClass.getDeclaredConstructor( Integer.TYPE ).newInstance( 10 );
    }catch(Exception e){
        e.printStackTrace();
        return null;
    }
}