Я работал над тем, чтобы лучше понять инструменты отражения Java, и сейчас пытаюсь создать новый экземпляр класса с конструктором, который был выбран пользователем в раскрывающемся списке.
//ask user what to name the new instance of chosen Class ( passed into this method )
String instanceName = JOptionPane.showInputDialog(null, "Under what name would you like to store this Instance?",
"Create an Instance of a Class", JOptionPane.QUESTION_MESSAGE);
Object chosenC = JOptionPane.showInputDialog(null, "Please choose a Constructor for" + chosenClass,
"Create an Instance of a Class", 3, null, getConstructors(chosenClass), JOptionPane.QUESTION_MESSAGE);
Constructor c = (Constructor)chosenC;
Class[] params = c.getParameterTypes(); //get the parameters of the chosen Constructor
try {
//create the instance with the correct constructor
instance = c.newInstance((Object[])params);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e){
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
Прямо сейчас я получаю исключение ArgumentTypeMismatch, если я выбираю что-либо, кроме конструктора по умолчанию (без параметров). Я что-то упускаю явно очевидное?
Спасибо за любую помощь.
EDIT
Спасибо всем за ваши ответы.
Но тогда как мне спросить параметры? Если я получу длину массива params, мне нужно будет определить, к какому классу относится каждый индекс, и попросить пользователя ввести значение в правильной форме? Тогда как мне передать этот новый массив в параметр newInstance?