使用String值创建变量名称

时间:2011-12-25 22:38:24

标签: java class variables object

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

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

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

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

2 个答案:

答案 0 :(得分:41)

虽然您可以使用某些脚本语言(例如PHP)来执行您尝试的操作(许多启动Java的PHP程序员经常会问这个问题),但这不是Java的工作原理,实际上变量名称是在编译代码之后,比你可能意识到的重要得多,甚至几乎不存在。更重要的是什么是关键变量引用 - 能够在程序的特定点获取对特定对象的访问权限,并且您可以通过使用字符串轻松引用对象以一种方式映射。

例如

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

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

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

修改
你说:

  

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

当我说变量的名称并不像你想象的那么重要时,这正是我的意思。变量名是 &#34;对象名称&#34; (这实际上并不存在)。

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

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

如果你想给一个变量a&#34; name&#34;考虑给该类一个名称属性:

class Dog {
   private String name;

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

   public String getName() {
      return name;
   }
}

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

答案 1 :(得分:5)

我不认为你在考虑Enums

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

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