Создание имени переменной с использованием строкового значения - PullRequest
14 голосов
/ 26 декабря 2011

Это простой вопрос (я думаю)

Допустим, у меня есть этот код (при условии, что у меня есть класс собаки)

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

Как я могу заставить Java распознавать имя как строку и называть объект собакой?

Ответы [ 2 ]

41 голосов
/ 26 декабря 2011

Хотя вы можете делать то, что вы пытаетесь, на некоторых языках сценариев, таких как PHP (и этот вопрос часто задают многие программисты PHP, запускающие Java), это не то, как работает Java, и на самом деле имена переменных - это оченьменее важно, чем вы можете себе представить, и вряд ли даже существует после компиляции кода.Что гораздо важнее, а что является ключом, это переменные ссылки - возможность получить доступ к определенному объекту в определенной точке вашей программы, и вы можете сделать так, чтобы строки легко ссылались на объекты с помощью картыкак один из способов.

Например

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

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

Или вы можете получить ссылки на объекты многими другими способами, например, через массивы, ArrayLists, LinkedLists или несколько других коллекций.

Редактировать
Вы утверждаете:

Дело в том, что в моем коде я собираюсь использовать один метод для создания объектов, имя объекта является произвольнымно мне нужно, чтобы он был динамическим, потому что он не будет временным, поэтому собственно имя объекта должно измениться, или я буду писать поверх ранее объявленного объекта.

Это именно то, что я имел в виду, когдаЯ сказал, что имя переменной не так важно, как вы думаете.Имя переменной не «имя объекта» (это на самом деле не существует).

Например, если вы создаете собаку в переменной с именемFido, а затем назначьте его новой переменной с именем spot, обе переменные, несмотря на разные имена, будут ссылаться на один и тот же объект:

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

Если вы хотите дать переменной «name», подумайте о том, чтобы датьСвойство class a name:

class Dog {
   private String name;

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

   public String getName() {
      return name;
   }
}

Теперь вы можете присвоить каждому объекту Dog свое (полу) уникальное имя, если хотите.

5 голосов
/ 26 декабря 2011

Я не думаю, что вы думаете о Enums ?

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

enum Animal {
  Dog,
  Cat,
  Cow,
  Pig,
  Rat,
  Ant,
  Gnu;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...