web-dev-qa-db-ja.com

文字列値を使用して変数名を作成する

これは簡単な質問です(私は思う)

私がこのコードを持っているとしましょう(犬のクラスがあると仮定して)

String name = "dog";
dog name = new dog();

名前を文字列として認識し、オブジェクトdogに名前を付けるには、どうすればJavaを取得できますか?

15
charles horvath

PHP(およびこの質問は、多くのPHP Javaを開始するプログラマー)によって頻繁に尋ねられます)これはJavaがどのように機能するかではなく、実際、変数名はあなたが気づくよりもはるかに重要ではなく、コードのコンパイル後に存在することさえほとんどありません。 references-プログラム内の特定のポイントで特定のオブジェクトにアクセスする機能。Stringを使用して、オブジェクトを簡単に参照できます。一方向としての地図。

例えば

Map<String, Dog> dogMap = new HashMap<String, Dog>();
dogMap.put("Fido", new Dog("Fido"));

Dog myPet = dogMap.get("Fido");

または、配列、ArrayLists、LinkedLists、または他のいくつかのcollectinosなど、他の多くの方法でオブジェクトへの参照を取得できます。

編集
あなたの状態:

私のコードでは、1つのメソッドを使用してオブジェクトを作成しますが、オブジェクトの名前は任意ですが、一時的なものではないため、動的にする必要があります。したがって、実際にはオブジェクトの名前を変更するか、以前に宣言したオブジェクトを上書きします。

これは、変数の名前があなたが思っているほど重要ではないと言ったとき、私がまさに意味したものです。変数名はnot「オブジェクト名」です(これは実際には存在しません)。

たとえば、Fidoという名前の変数で犬を作成し、それをspotという名前の新しい変数に割り当てた場合、両方の変数は、名前が異なっていてもまったく同じオブジェクトを参照します。

Dog fido = new Dog;
Dog spot = fido; // now fido and spot refer to the same object

変数に「名前」を付けたい場合は、クラスに名前プロパティを与えることを検討してください。

class Dog {
   private String name;

   public Dog(String name) {
      this.name = name;
   }

   public String getName() {
      return name;
   }
}

必要に応じて、各Dogオブジェクトに独自の(半)一意の名前を付けることができます。

Enums ?を考えているとは思わない

private static void test () {
  Animal animal = Animal.valueOf("Dog");
}

enum Animal {
  Dog,
  Cat,
  Cow,
  Pig,
  Rat,
  Ant,
  Gnu;
}
5
OldCurmudgeon