Java: динамически создавать объект из имени класса с аргументами - PullRequest
0 голосов
/ 29 мая 2018

У меня есть класс Java, имя которого хранится в базе данных, который я хочу загрузить во время выполнения.Я использую отражение, чтобы попытаться сделать это, но текущий код вызывает исключение InvocationTargetException:

String classname = "my.test.path.Class";
String details = "Some text";
Integer id = 123;

Class<?> cls = Class.forName(classname);
Constructor<?> cons = cls.getConstructors();
for (Constructor<?> con : cons) {
    System.out.println(con.toString()); // Does find the constructor
}
Constructor<?> constructor = cls.getConstructor(Integer.class, String.class);
ClassInterface object = (ClassInterface) constructor.newInstance(id, details);

Выходные данные System.out.println:

public my.test.path.Class(java.lang.Integer, java.lang.String) throws java.sql.SQLException,java.lang.ClassNotFoundException

Исключение составляетследующим образом:

java.lang.reflect.InvocationTargetException
  at test.path.Main...

Это класс, в котором приведен код выше, а не вызываемый конструктор.

1 Ответ

0 голосов
/ 29 мая 2018

С javadoc InvocationTargetException выдается, когда возникает исключение во время выполнения конструктора:

InvocationTargetException - если базовый конструктор выдает исключение.

Проверьте, допустимы ли аргументы (идентификатор и детали) для вашего конструктора и могут ли они генерировать исключения.

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