1

私はこのようなことをしたい:

Creator method = new Creator();
method.addSubject("example");

class Creator{
  public void addSubject(String subjName) {
     //here is the issue
     subjName = new Subject(subjName);
  }
}

class Subject {
  private String name;
  public Subject(String newName) {
    name = newName;
  }
}

したがって、Creator というこのクラスでサブジェクトを作成できるようにしたいのですが、これらのサブジェクトと呼びたい名前の文字列を渡すことで、そうできるようにする必要があります。これどうやってするの?

編集:明確にするために、クラス「Creator」には「addSubject」というメソッドがあります。プログラムのメイン メソッドには、「メソッド」と呼ばれる Creator のオブジェクトがあります (おそらく、より適切な例の名前を選択する必要がありました)。では、Creator のこのオブジェクトは、メソッド「addSubject」に Subject のオブジェクトに付けたい名前を渡すだけで、別のクラス、クラス「Subject」のオブジェクトを作成できますか?

Edit2:これは私が欲しいものの擬似コードです:

Main method:
Initialize Creator object
Command line for program takes arguments
Pass these arguments to creator object

Creator Object:
Takes command line argument in the form of string and makes a new object of the class Subject by the name of the String
4

2 に答える 2

4

名前を使いたいだけのクラスの新しいオブジェクトを作成したいと思います。それは...ですか?したがって、これを行うことができます(Java 7)。

try {
    // you need to provide the default constructor!
    Object newInstance = Class.forName( "your.package.YourClassName" ).newInstance();
} catch ( ClassNotFoundException | IllegalAccessException | InstantiationException exc ) {
    exc.printStackTrace();
}

7 より前の Java バージョンを使用している場合は、ClassNotFoundException 用、IllegalAccessException 用、InstantiationException 用の 3 つの catch ステートメントを使用する必要があります。

編集:私は今理解したと思います。メソッドに渡された名前で Subject のインスタンスを作成したいとします。HashMap を使用してこれをシミュレートできます。

何かのようなもの:

import java.util.*;

class Creator{

  private Map<String, Subject> map = new HashMap<String, Subject>();

  public void addSubject(String subjName) {
     map.put( subjName, new Subject(subjName) );
  }

  public Subject getSubject(String subjName) {
     return map.get(subjName);
  }
}

class Subject {
  private String name;
    public Subject(String newName) {
      name = newName;
    }
    @Override
    public String toString() {
      return name;
    }
}

// using...
Creator method = new Creator();
method.addSubject("example");

// prints example
System.out.println( method.getSubject("example") );

// prints null, since there is not a value associeted to the "foo" 
// key in the map. the map key is your "instance name".
System.out.println( method.getSubject("foo") );
于 2012-07-24T01:57:52.147 に答える
1

これは動作しないビットです:

subjName = new Subject(subjName);

subjNameは文字列ですが、もちろん anew Subject()Subject

どうですか

Subject myNewSubject = new Subject(subjName);

もちろん、あなたが本当に望んでいるのは、それをSubjectどこかに(Collection多分?)届けることだと思いますが、あなたの質問は明確ではないので、そのままにしておきます。

于 2012-07-24T01:54:34.643 に答える