使用字符串值创建变量名称

2022-09-02 11:30:19

这是一个简单的问题(我认为)

假设我有这个代码(假设我有一个狗类)

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

如何让java将名称识别为字符串并命名对象狗?


答案 1

虽然你可以在某些脚本语言(如PHP)中做你正在尝试的事情(这个问题经常被许多启动Java的PHP程序员问到),但这不是Java的工作方式,事实上,变量名称远不如你意识到的那么重要,甚至在代码编译后几乎不存在。更重要和关键的是变量引用 - 在程序中的特定点访问特定对象的能力,并且您可以通过使用Map作为一种方式轻松让字符串引用对象。

例如

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

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

或者,您可以通过许多其他方式获取对对象的引用,例如通过数组,ArrayList,LinkedLists或其他几个collectinos。

编辑
您声明:

问题是,在我的代码中,我将使用一种方法来创建对象,对象的名称是任意的,但我需要它是动态的,因为它不会是临时的,所以对象的实际名称必须更改,否则我将覆盖先前声明的对象。

这正是我说变量的名称并不像你想象的那么重要的意思。变量名称不是“对象名称”(实际上这并不存在)。

例如,如果您在名为 Fido 的变量中创建一个 dog,然后将其分配给一个名为 spot 的新变量,则这两个变量尽管具有不同的名称,但都将引用完全相同的对象:

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

如果要为变量指定一个“name”,请考虑为该类指定一个 name 属性:

class Dog {
   private String name;

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

   public String getName() {
      return name;
   }
}

现在,如果您愿意,您可以为每个 Dog 对象指定其自己的(半)唯一名称。


答案 2

我不认为你在想枚举

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

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