После долгого дня поиска я все еще не могу понять, как я могу создать новый объект из самодельного класса, если конструктор принимает не примитивные аргументы. Теперь я начинаю сомневаться, возможно ли это вообще?!
В Документации отражения они говорят только о примитивных типах (таких как int, float, boolean и т. Д.), Насколько я видел. И вся остальная информация / сайт / мастерская / пример, которую я нашел, также просто учитывает примитивные типы, чтобы найти конструктор и создать новый экземпляр.
Итак, что я хочу сделать, это следующее (разбитый сценарий):
Предположим, я получил класс с именем MyStupidClass. Другой класс (назовем его MyUsingClass) принимает объект MyStupidClass в качестве аргумента в конструкторе.
Теперь в моем основном приложении я хочу иметь возможность загрузить класс MyUsingClass и создать экземпляр объекта из конструктора.
Это то, что я узнал об «использовании Reflection»:
С пустым конструктором:
//the MyUsingClass:
public class MyUsingClass {
//the public (empty) constructor
public MyUsingClass() {
...
}
}
В основном приложении я бы сейчас сделал что-то вроде:
//get the reflection of the MyUsingClass
Class<?> myUsingClassClass = Class.forName("MyUsingClass");
//get the constructor [I use getConstructor() instead of getConstructors(...) here as I know there is only one]
Constructor<?> myUsingClassConstr = myUsingClassClass.getConstructor();
//instanciate the object through the constructor
Object myInstance = myUsingClassConstr.newInstance(null);
Теперь, если бы я использовал некоторые примитивные типы в MyUsingClass , это выглядело бы примерно так:
//the MyUsingClass:
public class MyUsingClass {
//the public (primitive-only) constructor
public MyUsingClass(String a, int b) {
...
}
}
В основном приложении последняя строка изменится на что-то вроде:
//instanciate the object through the constructor
Object myInstance = myUsingClassConstr.newInstance(new Object[]{new String("abc"), new Integer(5)});
Пока проблем нет (в приведенном выше коде могут быть небольшие ошибки, так как это всего лишь разбитый пример ...)
Теперь ключевой вопрос в том, как мне создать myInstance, если MyUsingClass выглядит примерно так:
//the MyUsingClass:
public class MyUsingClass {
//the public (primitive-only) constructor
public MyUsingClass(String a, int b, MyStupidObject toto) {
...
}
}
? Любая помощь будет оценена! Спасибо, что прочитали мой вопрос!
приветствует св