Использование Reflection: java.reflection.Constructor.newInstance () - PullRequest
5 голосов
/ 10 июня 2011

Я пытаюсь создать экземпляр класса с помощью метода Constructor.newInstance (), но у меня возникают проблемы с правильным предоставлением параметров для конструктора.Проблема в том, что параметры конструктора доступны в виде массива String [], элементы которого я должен привести к соответствующим им типам.Это работает для объектов, но что, если некоторые параметры относятся к примитивным типам?

Вот упрощенный пример (который, кажется, будет работать, пока я не достигну примитивного типа):

Class fooClass = Class.forName("Foo");
Constructor[] fooCtrs = fooClass.getConstructors();
Class[] types = fooCtrs[0].getParameterTypes();
Object[] params = new Object[types.length];

for(int i = 0; i < types.length; i++) {
    params[i] = types[i].cast(args[i]);  // Assume args is of type String[]
}

Один разЯ нажму Int или что-то, я получу ClassCastException.Я делаю что-то не так?Нужно ли мне вручную оборачивать примитивы, с которыми я сталкиваюсь, или есть встроенный способ сделать это?

Ответы [ 2 ]

4 голосов
/ 10 июня 2011

Правильно, вам нужно добавить примитивы в оболочку.

Читать о примитивах в Constructor.newInstance () docs

Параметры: initargs - массив объектов, передаваемых в качестве аргументов вызову конструктора; значения примитивных типов обернуты в объект-оболочку соответствующего типа (например, с плавающей точкой в ​​Float)

1 голос
/ 10 июня 2011

args[i] может быть не приведено к нужному типу.

Например, если у вас есть список "foo" и type[i].cast() ожидает int

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...