Я хотел бы создать экземпляр объекта из его объекта Class
, используя конструктор, который принимает один аргумент String
.
Вот некоторый код, который подходит что я хочу:
Object object = null;
Class classDefinition = Class.forName("javax.swing.JLabel");
object = classDefinition.newInstance();
Однако он создает экземпляр объекта JLabel
без текста. Я хотел бы использовать конструктор JLabel
, который принимает строку в качестве исходного текста. Есть ли способ выбора конкретного конструктора из объекта Class
?
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. Используйте отражение только в крайнем случае!
Следующее будет работать для вас. Попробуйте это,
Class[] type = { String.class };
Class classDefinition = Class.forName("javax.swing.JLabel");
Constructor cons = classDefinition .getConstructor(type);
Object[] obj = { "JLabel"};
return cons.newInstance(obj);