使用string作为Java中对象的名称

时间:2012-11-10 15:20:11

标签: java string variables

好的,我有以下代码:

Random rnd = new Random();
int i = 0;
while(i<1000) {
  String name = "event" + i;
  Event name = new Event(rnd.nextInt(100000)); //ERROR duplicate variable
  SimEngine.getScheduler().addEventToQueue(event);
  i++;
}
System.out.println(SimEngine.getScheduler().getQueue().iterator());

我知道两次宣布名字毫无意义,但我希望你能看到我想要做的事情。因为我想要名称为event1,event2,event3等的Event对象。

如何让我使用String名称作为Event对象的名称?

4 个答案:

答案 0 :(得分:6)

  

因为我想要名称为event1,event2,event3等的Event对象。

对象不(通常)具有名称。变量有名字。你真的不希望变量名为event1event2等变量。

在这种情况下,如果你真的需要通过索引访问事件,你基本上应该使用数组。

Event[] events = new Event[1000];
for (int i = 0; i < 1000; i++) {
    events[i] = new Event(rnd.nextInt(100000));
    SimEngine.getScheduler().addEventToQueue(events[i]);
}

当然,如果你以后不打算使用这个变量,那么无论如何它都是毫无意义的,你可以和以下人一样:

for (int i = 0; i < 1000; i++) {
    SimEngine.getScheduler().addEventToQueue(new Event(rnd.nextInt(100000));
}

如果这个特定类的 具有与每个实例关联的名称,我怀疑你需要将该名称传递给构造函数。

答案 1 :(得分:4)

您不能 1 ,但您可以改为使用Map<String,Event>,并将变量名称作为键,将对象作为值。

要访问“变量”,您可以使用Map.get()Map.put()。有点像:

Map<String,Event> varaibles = new HashMap<String,Event>();
variables.put("event" + i, new Event(...)) //setting new "varaibles"
Event myEvent = variables.get(someString); //getting the objects assigned to a "variable"

(1)可以用reflection部分完成。如果你已经有了变量(没有声明新变量) - 你可以使用反射API按名称访问变量,但它没有被修改。

答案 2 :(得分:1)

使用数组或哈希表。

Map<String, Event> m = new HashMap<String, Event>();

您不能(至少不容易)在运行时设置变量名称。

答案 3 :(得分:1)

您不必为每个对象命名,以便使用它们的一系列数据结构,数组或地图的数据结构 所以你可以做点什么

SimEngine.getScheduler().addEventToQueue(new Event(rnd.nextInt(100000)));

是你想要的吗?