繁体   English   中英

动态创建对象,其中类名作为字符串给出

[英]Creating an object dynamically where the class name is given as a string

我正在尝试通过将类名称作为字符串发送来动态创建类的对象。 我已经搜索了所有的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类,但我如何为它们创建对象? 传递的字符串可能是另一种方法中的其他东西,我如何为这种事物创建一个对象。

谁能帮我....

先感谢您,

但现在我想为该类创建对象

如果您从不需要处理带参数的构造函数,则使用Class.newInstance()方法,否则使用Class.getConstructor(...)Class.getConstructors() (调用Constructor.newInstance()来调用构造函数。)

使用Class#newInstance()

Object o = Class.forName(path).newInstance();

然后,您可以将其强制转换为代理。

Agent agent = (Agent) Class.forName(path).newInstance();

基于类具有默认构造函数(即没有参数),您可以简单地调用Class#newInstance

如果它有参数,它会变得有点复杂。

您必须通过Class#getConstructor获取对相应Constructor的引用,并传入预期的参数类类型。

完成后,可以调用Constructor#newInstance ,将相应的对象传递给它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM