在Java中使用字符串作为名称的对象

问题描述:

好了,所以我有下面这段代码:在Java中使用字符串作为名称的对象

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对象的名称?

因为我想与事件事件1名,事件2,对象EVENT3等

对象不(通常)有名字。变量有名字。不过,你真的不想拥有名称为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)); 
} 

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

+0

非常感谢!这两种解决方案都很有帮助,但由于我以后不打算使用每个Event对象,所以我将采用第二种方法。 :) – DSF

您不能,但您可以使用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的名字来访问一个变量,但它是不受监督的。

使用数组或哈希表。

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

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

你不必命名每个对象以使用一个系列当中,这就是数据结构是,前阵列或映射 所以你可以做这样的事情

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

是什么你要?