与えられたクラス値:
_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
を使用して新しいValueオブジェクトを作成できますか?ここでConstructor
of Value
を呼び出しますか?
ありがとう
このための正確なコンストラクタを見つける必要があります。 Class.newInstance()
は、nullaryコンストラクターの呼び出しにのみ使用できます。だから書く
final Value v = Value.class.getConstructor(
int.class, int.class, double.class).newInstance(_xval1,_xval2,_pval);
Class.newInstance()
メソッドは、引数なしのコンストラクターのみを呼び出すことができます。パラメーター化されたコンストラクターでリフレクションを使用してオブジェクトを作成する場合は、Constructor.newInstance()
を使用する必要があります。あなたは単に書くことができます
Constructor<Value> constructor = Value.class.getConstructor(int.class, int.class, double.class);
Value obj = constructor.newInstance(_xval1,_xval2,_pval);
詳細については リフレクションを介したオブジェクトの作成Java例