JAN
JAN

Reputation: 21895

Create new object using reflection?

Given class Value :

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;
    }


...
}

I'm trying to create a new instance of that class using reflection :

from Main :

    .... // 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);

...

This doesn't work , Eclipse's output : The method newInstance() in the type Class is not applicable for the arguments (int, int, double)

If so , how can I create a new Value object using reflection , where I invoke the Constructor of Value ?

Thanks

Upvotes: 29

Views: 65088

Answers (2)

Naresh Joshi
Naresh Joshi

Reputation: 4607

The Class.newInstance() method can only invoke a no-arg constructor. If you want to create objects using reflection with parameterized constructor than you need to use Constructor.newInstance(). You can simply write

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

For details you can read Creating objects through Reflection in Java with Example

Upvotes: 4

Marko Topolnik
Marko Topolnik

Reputation: 200296

You need to locate the exact constructor for this. Class.newInstance() can only be used to call the nullary constructor. So write

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

Upvotes: 52

Related Questions