使用接受字符串参数的构造函数实例化类对象?
问题描述:
我想从它的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);
答
Class.forName("className").newInstance()
总是调用没有参数的默认构造函数。
要调用,而不是无参数无参数的构造函数参数化的构造,
- 你必须传递类型
Class[]
得到Constructor
与参数类型的Class
-
getDeclaredConstructor
方法你必须创建构造函数实例通过传递值Object[]
为newInstance
方法Constructor
示例代码:
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