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

我想从它的Class对象实例化一个对象,使用接受一个String参数的构造函数。

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

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

但是,它没有文本实例化JLabel对象。 我想使用接受一个string作为初始文本的JLabel构造函数。 有没有办法从一个Class对象中select一个特定的构造函数?

Class.newInstance调用无参数构造函数(不带任何参数的构造函数)。 为了调用不同的构造函数,你需要使用reflection包( java.lang.reflect )。

获取像这样的Constructor实例:

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

getConstructor的调用指定您需要带有一个String参数的构造函数。 现在创build一个实例:

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

你完成了。

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

以下将为你工作。 尝试这个,

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

Class.forName("className").newInstance()总是调用没有参数的默认构造函数。

要调用参数化构造函数而不是零参数no-arg构造函数,

  1. 您必须通过在Class[]Class getDeclaredConstructor方法传递types来获取具有参数types的Constructor函数
  2. 您必须通过在Object[]传递值来创build构造函数实例
    Constructor newInstance方法

示例代码:

 import java.lang.reflect.*; class NewInstanceWithReflection{ public NewInstanceWithReflection(){ System.out.println("Default constructor"); } public NewInstanceWithReflection( String a){ System.out.println("Constructor :String => "+a); } public static void main(String args[]) throws Exception { NewInstanceWithReflection object = (NewInstanceWithReflection)Class.forName("NewInstanceWithReflection").newInstance(); Constructor constructor = NewInstanceWithReflection.class.getDeclaredConstructor( new Class[] {String.class}); NewInstanceWithReflection object1 = (NewInstanceWithReflection)constructor.newInstance(new Object[]{"StackOverFlow"}); } } 

输出:

 java NewInstanceWithReflection Default constructor Constructor :String => StackOverFlow