Рефлексия. Constructor.newInstance(params)

Рейтинг: 1Ответов: 1Опубликовано: 15.03.2015

Задача: имею имя класса. С помощью рефлексии достаю из него все доступные конструкторы и предлагаю пользователю выбрать какой-то. После того как он выбрал, он вводит желаемые параметры определённого конструктора и создается объект по этому к-у. Вопрос: как в Constructor.newInstance(params) на место params засунуть всё то, что хочет задать пользователь? Например, у меня есть конструктор с полями (int, String), как сделать объект по этому к-у?

Ответы

▲ 1Принят

Судя по докам, в качестве params надо передавать Object[] с вашими аргументами. Т.е. при конструкторе вида

(int, String)

надо как-то так:

Integer firstArg=42;
String secondArg="Ответ на сей вопрос я нагуглил за 20 секунд!";
Object[] args=new Object[]{firstArg, secondArg);
Constructor.newInstance(args);

Причём передавать в метод надо именно не примитивы, а их обертки-объекты.


В общем случае, согласно этому делается так:

1) Получаем массив конструкторов.

2) Методом

getParameterTypes()

Получаем массив типов аргументов конструктора.

3) Создаём массив переменных узнанных типов и создаём объект как описано выше.