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
We can use newInstance() method on the constructor object to instantiate a new instance of the class. Since we use reflection when we don't have the classes information at compile time, we can assign it to Object and then further use reflection to access it's fields and invoke it's methods.
In order to reflect a Java class, we first need to create an object of Class . And, using the object we can call various methods to get information about methods, fields, and constructors present in a class. class Dog {...} // create object of Class // to reflect the Dog class Class a = Class. forName("Dog");
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);
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With