随机生成变量名?

时间:2010-06-24 20:59:02

标签: java iteration

我遇到了问题..我有类似......

    if(condition(TEST) == true){

     something (NAME) = new something(this);

     }

这是在循环中,其中有许多TEST变量被迭代通过。我不知道它们中有多少可能需要一个“(NAME)”变量,所以基本上我想知道如何让“动态”生成这些变量的名称?

谢谢!

4 个答案:

答案 0 :(得分:8)

您确定不希望将结果存储在数组或集合中吗? 最接近的是使用Map。随机生成StringInteger密钥,并将其用作Something值的关键字。

// Before all
Map<String, Something> myMap = new HashMap<String, Something>();

// For each of these
if(condition(TEST) == true){
   String name = "VAR" + Math.random() // Don't remember the syntax here
   myMap.put(name, new something(this));
}

答案 1 :(得分:3)

除非我误解你的问题,否则你不需要这样做。

Java中的变量是词法范围的,因为它们仅针对它们所在的块进行定义。在循环的每次迭代中,您的name参数将引用不同的对象,并且不会受先前循环中保存的值的影响。

因此,您只需要在循环中需要尽可能多的参数,因为您希望在循环中操作的属性(可能只有一个),这在所有情况下都是您在编写代码时可以确定的(在编译时)并且与TEST对象的(运行时)数量分开。

答案 2 :(得分:0)

如果你以后没有存储或引用它们,并且它们都是相同的类型,你可以对所有这些使用相同的变量:

 // Outside loop ...
 something $name;

 // Inside loop ...
 if(condition(TEST) == true){

   $name = new something(this);

 }

答案 3 :(得分:0)

在id中生成的最简单方法(例如对于Map)是使用AtomicInteger。

AtomicInteger counter = new AtomicInteger();

Map<String, Something> map = ...
String id = Integer.toString(counter.getAndIncrement(), 36);
map.put(id, new Something());
// later
Something s = map.get("0");

或者使用自然索引的List会更简单。

List<Something> list = ...
list.add(new Something());
// later
Something s = map.get(0);