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

时间:2012-10-10 05:52:31

标签: java

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

任何人都可以帮助我......

提前谢谢你,

3 个答案:

答案 0 :(得分:9)

  

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

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

答案 1 :(得分:7)

使用Class#newInstance()

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

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

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

答案 2 :(得分:5)

由于该类具有默认构造函数(即没有参数),您只需调用Class#newInstance

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

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

完成后,您可以调用Constructor#newInstance传递适当的对象