使用接受字符串参数的构造函数实例化一个类对象?

HAM*_*MID 71 html java reflection constructor

我想Class使用接受单个String参数的构造函数从其对象实例化一个对象.

这是一些接近我想要的代码:

Object object = null;
Class classDefinition = Class.forName("javax.swing.JLabel");
object = classDefinition.newInstance();
Run Code Online (Sandbox Code Playgroud)

但是,它实例化JLabel没有文本的对象.我想使用JLabel接受字符串作为初始文本的构造函数.有没有办法从Class对象中选择特定的构造函数?

mwi*_*ock 112

Class.newInstance调用no-arg构造函数(不带任何参数的构造函数).要调用不同的构造函数,需要使用反射包(java.lang.reflect).

获取这样的Constructor实例:

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

调用getConstructor指定您需要采用单个String参数的构造函数.现在创建一个实例:

Object o = cons.newInstance("JLabel");
Run Code Online (Sandbox Code Playgroud)

而且你已经完成了.

PS只使用反射作为最后的手段!

  • “作为最后的手段”。实际上,这是第一个也是唯一的选择,因此不知道为什么您决定像这样限定您的职位。 (3认同)

Jot*_*thi 13

以下内容适合您.试试这个,

Class[] type = { String.class };
Class classDefinition = Class.forName("javax.swing.JLabel"); 
Constructor cons = classDefinition .getConstructor(type);
Object[] obj = { "JLabel"};
return cons.newInstance(obj);
Run Code Online (Sandbox Code Playgroud)