web-dev-qa-db-fra.com

Création d'un nom de variable à l'aide d'une valeur de chaîne

Ceci est une question simple (je pense)

Disons que j'ai ce code (en supposant que j'ai un cours de chien)

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

Comment puis-je obtenir Java pour reconnaître le nom en tant que chaîne et nommer l'objet chien?

15
charles horvath

Bien que vous puissiez faire ce que vous essayez dans certains langages de script tels que PHP (et cette question est souvent posée par de nombreux programmeurs PHP qui démarrent Java), ce n'est pas ainsi que fonctionne Java, et en fait les noms de variables sont beaucoup moins importants que vous ne le pensez et n'existent même pas après la compilation du code. Ce qui est beaucoup plus important et ce qui est clé sont variables références - la possibilité d'accéder à un objet particulier à un point particulier de votre programme, et vous pouvez faire en sorte que les chaînes se réfèrent facilement aux objets en utilisant un Carte à sens unique.

Par exemple

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

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

Ou vous pouvez obtenir des références à des objets de nombreuses autres manières, par exemple via des tableaux, des listes de tableaux, des listes de liens ou plusieurs autres collectinos.

Modifier
Vous déclarez:

Le fait est que dans mon code, je vais utiliser une méthode pour créer des objets, le nom de l'objet est arbitraire mais j'ai besoin qu'il soit dynamique car il ne sera pas temporaire, donc le nom de l'objet doit changer ou J'écrirai sur l'objet déclaré précédemment.

C'est exactement ce que je voulais dire quand j'ai dit que le nom de la variable n'est pas aussi important que vous le pensez. Le nom de la variable est pas le "nom de l'objet" (cela n'existe pas vraiment en fait).

Par exemple, si vous créez un chien dans une variable nommée Fido, puis l'affectez à une nouvelle variable nommée spot, les deux variables, bien qu'ayant des noms différents, feront référence au même objet:

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

Si vous voulez donner un nom à une variable, pensez à donner à la classe une propriété de nom:

class Dog {
   private String name;

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

   public String getName() {
      return name;
   }
}

Vous pouvez maintenant donner à chaque objet Chien son propre nom (semi) unique si vous le souhaitez.

42

Je ne suppose pas que vous pensez à Enums ?

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

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