在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等
对象不(通常)有名字。变量有名字。不过,你真的不想拥有名称为event1
,event2
等的变量。
在这种情况下,如果您确实需要通过索引访问事件,则基本上应该使用数组。
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));
}
如果这种特殊类的确实有一个与每个实例关联的名称,您需要将该名称传递给构造函数,我怀疑。
答
您不能,但您可以使用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)));
是什么你要?
非常感谢!这两种解决方案都很有帮助,但由于我以后不打算使用每个Event对象,所以我将采用第二种方法。 :) – DSF