Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

like image 753
JAN Avatar asked May 06 '12 11:05

JAN


People also ask

How do you create a object of a class using reflection?

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.

How do you create a class using reflection in Java?

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");


2 Answers

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); 
like image 50
Marko Topolnik Avatar answered Sep 21 '22 11:09

Marko Topolnik


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

like image 29
Naresh Joshi Avatar answered Sep 21 '22 11:09

Naresh Joshi