8

我正在尝试通过将类名作为字符串发送来动态创建类的对象。我已经在所有的 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 类,但我怎样才能为它们创建对象?传递的字符串可能是其他方法中的其他内容,我如何为此类事物创建对象。

谁能帮我....

先感谢您,

4

3 回答 3

9

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

Class.newInstance()如果您从不需要处理带参数的构造函数,或者使用Class.getConstructor(...)或以其他方式处理,请使用该方法Class.getConstructors()。(调用Constructor.newInstance()以调用构造函数。)

于 2012-10-10T05:56:32.130 回答
7

使用类#newInstance()

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

然后,您可以将其投射到代理。

Agent agent = (Agent) Class.forName(path).newInstance();
于 2012-10-10T05:54:20.893 回答
5

由于该类有一个默认构造函数(即没有参数),您可以简单地调用Class#newInstance.

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

您必须获得对适当Constructorvia的引用Class#getConstructor,并传入预期的参数类类型。

一旦你有了它,你可以调用Constructor#newInstance传递给它适当的对象

于 2012-10-10T05:56:46.437 回答