我正在尝试通过将类名作为字符串发送来动态创建类的对象。我已经搜索了所有的java论坛,但我无法得到我想要的答案。 这是我的要求, 我有一个名为Agent的课程,
package somePack;
public class Agent{
private String Id;
Private String Name;
public String getId() {
return this.id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
package somePack;
public class Employee{
private String Id;
Private String Name;
public String getId() {
return this.id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
public class create{
public static void main(String[] args){
newCreate("Employee");
newCreate("Agent");
}
public static void newCreate(String name){
String path="somePack."+name;
Class cls=Class.forName(path);
System.out.println("Class Name " + cls.getName());
}
}
现在我的问题是,cls.getName()给了我类名,但现在我想为该类创建对象,即分别为Employee类和Agent类,但是我如何为它们创建对象?传递的字符串可能是另一种方法中的其他东西,我如何为这种事物创建一个对象。
任何人都可以帮助我......
提前谢谢你,
答案 0 :(得分:9)
但现在我想为该类创建对象
如果您永远不需要处理带参数的构造函数,则使用Class.newInstance()
方法,否则使用Class.getConstructor(...)
或Class.getConstructors()
。 (调用Constructor.newInstance()
来调用构造函数。)
答案 1 :(得分:7)
Object o = Class.forName(path).newInstance();
然后您可以将其强制转换为代理。
Agent agent = (Agent) Class.forName(path).newInstance();
答案 2 :(得分:5)
由于该类具有默认构造函数(即没有参数),您只需调用Class#newInstance
。
如果它有参数,它会变得有点复杂。
您必须通过Class#getConstructor
获取对相应Constructor
的引用,并传入预期的参数类类型。
完成后,您可以调用Constructor#newInstance
传递适当的对象