2010-06-24 209 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);