2015-01-17 36 views
-1

爲爲例,如果我有很多變量VAR1,VAR2,VAR3,....我怎麼能操縱它們的容易使用索引我如何使Java變量變量的名稱本身

for(int i=1,i<n;++i) 
    System.out.print(vari); 

我知道這是不正確的,但我想知道是否有可能以這種方式操縱變量

+0

FWIW,你想要什麼被稱爲反射(請參閱此[問題](http://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-usef)) – fxm

回答

1

是否有原因,你不會使用集合?例如數組,列表甚至地圖。

我的答案是使用這些構造之一,否則我不相信有一個更簡單的方法。

我能想出最接近的事是這樣的:

Map<String, Object> map = new HashMap<>(); 
for(int i=1; i<map.size(); i++) { 
    System.out.println(map.get("var"+i)); 
} 
+0

只是提醒,數組不是一個集合。 –

+0

是的,它不是一個Java集合。但是它可以被稱爲集合,因爲它用於收集數據,或者不是? – torque203

+0

不,因爲Collection是Java中非常具體的東西。集合和數組的集合名稱是容器。 –

0

如果VARI是一個局部變量,這是不可能的。 如果vari都是該類的成員,那麼可以通過使用Reflection API(參見方法Class.getField()和Class.getDeclaredField())來實現,但效率非常低。更好地使用集合,並找到其他選項。

2

它們添加到列表或數組YourClass []和遍歷他們是這樣的:

List<Cat> catsList = new ArrayList<>(); 
Cat[] catsArray = new Cat[3]; //alternatively 
public CatHouse(){ 
    Cat bob = new Cat(); 
    Cat fluffy = new Cat(); 
    Cat tom = new Cat(); 
    catsList.add(bob); 
    catsList.add(fluffy); 
    catsList.add(tom); 
    //alternatively 
    catsArray[0] = bob; 
    catsArray[1] = fluffy; 
    catsArray[2] = tom; 
} 

然後遍歷列表\陣列做一些事情:

public void groomAll(){ 
    for (Cat cat : catList){ 
     cat.groom(); 
    } 
    //alternatively 
    for (Cat cat : catArray){ 
     cat.groom(); 
    } 
} 
+0

非常感謝你,我在 之前沒有這個想法 – Ayoub