使用反射创建新的对象?(Create new object using reflection?)

2019-06-24 04:56发布

鉴于类值:

public class Value {

    private int xVal1;
    private int xVal2; 
    private double pVal;


    // constructor of the Value class 

    public Value(int _xVal1 ,int _xVal2 , double _pVal)
    {
        this.xVal1 = _xVal1;
        this.xVal2 = _xVal2;
        this.pVal = _pVal;
    }

    public int getX1val()
    {
        return this.xVal1;
    }


...
}

我试图创建一个使用这个类的一个新实例reflection

从主营:

    .... // some code 
    ....
    ....
    int _xval1 = Integer.parseInt(getCharacterDataFromElement(line));
    int _xval2 = Integer.parseInt(getCharacterDataFromElement(line2));
    double _pval = Double.parseDouble(getCharacterDataFromElement(line3));

     Class c = null;
     c = Class.forName("Value");
     Object o = c.newInstance(_xval1,_xval2,_pval);

...

这是不行的,Eclipse的输出: The method newInstance() in the type Class is not applicable for the arguments (int, int, double)

如果是这样,我怎么可以创建一个新的使用值对象reflection ,在那里我调用ConstructorValue

谢谢

Answer 1:

你需要找到确切的构造这一点。 Class.newInstance()只能用来调用默认构造。 所以写

final Value v = Value.class.getConstructor(
   int.class, int.class, double.class).newInstance(_xval1,_xval2,_pval);


Answer 2:

Class.newInstance()方法只能调用无参数构造。 如果你想创建一个使用反射与参数的构造函数比你需要使用对象Constructor.newInstance() 你可以简单地写

Constructor<Value> constructor = Value.class.getConstructor(int.class, int.class, double.class);
Value obj = constructor.newInstance(_xval1,_xval2,_pval);

有关详细信息,你可以阅读在Java中与实例通过创建对象的反思



文章来源: Create new object using reflection?