Я пытаюсь создать коллекцию объектов с использованием отражения. У меня есть имя класса. Но во время компиляции понятия не имеют о конструкторе. Я использовал этот учебник.Создание объекта из java-отражения без знания параметров конструктора
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);
}
}
}
Теперь, скажем, я не знаю, примыкает параметры конструкторов. (Является ли это конструктором по умолчанию или двумя целыми числами). Параметры бизнес-структур могут меняться от класса к классу. Я понятия не имею о классе 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);
}
Это будет работать для costrcutors, которые будут иметь Sprite или двойные параметры. Чтобы включить другие возможности, мне пришлось бы создать цепочку loooong if else. Нужна помощь.
Но зачем вам это нужно в первую очередь? –
Вот почему вы избегаете отражения и находите решение _better ._ –