8

クラス名を文字列として送信して、クラスのオブジェクトを動的に作成しようとしています。すべての Java フォーラムを検索しましたが、必要な回答が得られませんでした。これが私の要件です。エージェントという名前のクラスがあります。

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()、引数を使用してコンストラクターを処理する必要がない場合、または or を使用する必要がない場合は、メソッドをClass.getConstructor(...)使用しClass.getConstructors()ます。(Constructor.newInstance()コンストラクターを呼び出すために呼び出します。)

于 2012-10-10T05:56:32.130 に答える
7

Class#newInstance()を使用

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

これを Agent にキャストできます。

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 に答える