2010-06-24 186 views
-1

我有一个问题..我有类似...随机生成变量名?

if(condition(TEST) == true){ 

    something (NAME) = new something(this); 

    } 

这是一个循环,也有过被迭代许多测试变量里面。我不知道有多少可能每个人都需要一个“(NAME)”变量,所以基本上我想知道如何让java“即时”为这些变量生成一个名称?

谢谢!

+1

显示实际的代码将消除猜测这应该是如何工作的需要/什么它确实... – Eiko 2010-06-24 21:39:22

+1

真的,有没有必要做这样的事情:如果(条件(TEST)==真)只要(条件(TEST))足够。 – wlk 2010-06-24 22:02:49

回答

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)); 
} 
3

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

Java中的变量是词汇范围的,因为它们只是针对它们存在的块而定义的。在循环的每次迭代中,参数name将引用不同的对象,并且不会受到它在前一个循环中保留的值的影响。

所以,你只需要在循环中有多少个参数,因为你想在循环中操作属性(可能只有一个),在任何情况下,当你编写代码时, (在编译时),并且与(运行时)数量的TEST对象分离。

0

如果你不将它们存储或更高版本引用他们,他们都是同一类型的,你可以使用相同的变量为所有的人:

// Outside loop ... 
something $name; 

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

    $name = new something(this); 

} 
+0

如果您没有在循环外使用该变量,则该变量不需要在循环外部声明。 – dsmith 2010-06-24 23:37:06

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<Something> list = ... 
list.add(new Something()); 
// later 
Something s = map.get(0);