使用String值创建变量名称

cha*_*ath 16 java variables class object

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

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

String name = "dog";
dog name = new dog();
Run Code Online (Sandbox Code Playgroud)

如何让java将name识别为String并命名对象dog?

Hov*_*els 43

虽然你可以用PHP等一些脚本语言来做你正在尝试的东西(许多启动Java的PHP程序员经常会问这个问题),但这不是Java的工作原理,实际上变量名不如代码编译后你可能会意识到甚至几乎不存在.更重要的是,关键是变量引用 - 在程序中的特定点获取对特定对象的访问权限,并且您可以通过使用Map作为一种方式使字符串轻松引用对象.

例如

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

Dog myPet = dogMap.get("Fido");
Run Code Online (Sandbox Code Playgroud)

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

编辑
你说:

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

当我说变量的名称并不像你想象的那么重要时,这正是我的意思.变量名称不是 "对象名称"(事实上这确实不存在).

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

Dog fido = new Dog;
Dog spot = fido; // now fido and spot refer to the same object
Run Code Online (Sandbox Code Playgroud)

如果要为变量指定"名称",请考虑为类赋予名称属性:

class Dog {
   private String name;

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

   public String getName() {
      return name;
   }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果您愿意,您可以为每个Dog对象提供自己的(半)唯一名称.


Old*_*eon 5

我不认为你在想Enums

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

enum Animal {
  Dog,
  Cat,
  Cow,
  Pig,
  Rat,
  Ant,
  Gnu;
}
Run Code Online (Sandbox Code Playgroud)