リフレクションを使用してオブジェクトのコレクションを作成しようとしています。私はクラス名を持っています。しかし、コンパイル時にはコンストラクターについてはわかりません。このチュートリアルを使用しました。
import java.lang.reflect.*;
public class constructor2 {
public constructor2()
{
}
public constructor2(int a, int b)
{
System.out.println(
"a = " + a + " b = " + b);
}
public static void main(String args[])
{
try {
Class cls = Class.forName("constructor2");
Class partypes[] = new Class[2];
partypes[0] = Integer.TYPE;
partypes[1] = Integer.TYPE;
Constructor ct
= cls.getConstructor(partypes);
Object arglist[] = new Object[2];
arglist[0] = new Integer(37);
arglist[1] = new Integer(47);
Object retobj = ct.newInstance(arglist);
}
catch (Throwable e) {
System.err.println(e);
}
}
}
ここで、コンストラクターのパラメーターについて知らないとしましょう。(それがデフォルトのコンストラクターであるか、2 つの整数であるかに関係なく)。コンストラクターのパラメーターは、クラスごとに変更できます。Constructor2 クラスについてはわかりません。しかし、私はクラス名を持っています。したがって、上記のように「argList」を作成できません。コンストラクターからオブジェクトを作成する方法を考えてください。
私は次のようにしました
Constructor[] brickConstructorsArray = brickClass.getConstructors();
for (Constructor constructor : brickConstructorsArray) {
Class[] constructorParams = constructor.getParameterTypes();
Object argList[] = new Object[constructorParams.length];
int index = 0;
for (Class cls : constructorParams) {
if (cls.equals(Sprite.class)) {
Object spriteOb = foundSprite;
argList[index] = spriteOb;
} else if (cls.equals(double.class)) {
Object dblObj = new Double(0.0);
argList[index] = dblObj;
}
index++;
}
brickObject = (Brick) constructor.newInstance(argList);
}
これは、Sprite または double パラメーターを持つ costrcutor で機能します。他の可能性を含めるには、loooong if else チェーンを作成する必要があります。助けが必要。