Создание экземпляра объекта класса с помощью конструктора, который принимает строковый параметр?

Я хотел бы создать экземпляр объекта из его объекта Class , используя конструктор, который принимает один аргумент String .

Вот некоторый код, который подходит что я хочу:

Object object = null;
Class classDefinition = Class.forName("javax.swing.JLabel");
object = classDefinition.newInstance();

Однако он создает экземпляр объекта JLabel без текста. Я хотел бы использовать конструктор JLabel , который принимает строку в качестве исходного текста. Есть ли способ выбора конкретного конструктора из объекта Class ?

71
задан Ravindra babu 12 February 2016 в 18:59
поделиться

2 ответа

Class.newInstance вызывает конструктор без аргументов (тот, который не принимает никаких параметров). Чтобы вызвать другой конструктор, вам нужно использовать пакет отражения (java.lang.reflect).

Получите экземпляр Constructor следующим образом:

Class<?> cl = Class.forName("javax.swing.JLabel");
Constructor<?> cons = cl.getConstructor(String.class);

Вызов getConstructor указывает, что вам нужен конструктор, который принимает один параметр String. Теперь, чтобы создать экземпляр:

Object o = cons.newInstance("JLabel");

И все готово.

P.S. Используйте отражение только в крайнем случае!

110
ответ дан 24 November 2019 в 13:02
поделиться

Следующее будет работать для вас. Попробуйте это,

Class[] type = { String.class };
Class classDefinition = Class.forName("javax.swing.JLabel"); 
Constructor cons = classDefinition .getConstructor(type);
Object[] obj = { "JLabel"};
return cons.newInstance(obj);
13
ответ дан 24 November 2019 в 13:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: