爲爲例,如果我有很多變量VAR1,VAR2,VAR3,....我怎麼能操縱它們的容易使用索引我如何使Java變量變量的名稱本身
for(int i=1,i<n;++i)
System.out.print(vari);
我知道這是不正確的,但我想知道是否有可能以這種方式操縱變量
爲爲例,如果我有很多變量VAR1,VAR2,VAR3,....我怎麼能操縱它們的容易使用索引我如何使Java變量變量的名稱本身
for(int i=1,i<n;++i)
System.out.print(vari);
我知道這是不正確的,但我想知道是否有可能以這種方式操縱變量
是否有原因,你不會使用集合?例如數組,列表甚至地圖。
我的答案是使用這些構造之一,否則我不相信有一個更簡單的方法。
我能想出最接近的事是這樣的:
Map<String, Object> map = new HashMap<>();
for(int i=1; i<map.size(); i++) {
System.out.println(map.get("var"+i));
}
只是提醒,數組不是一個集合。 –
是的,它不是一個Java集合。但是它可以被稱爲集合,因爲它用於收集數據,或者不是? – torque203
不,因爲Collection是Java中非常具體的東西。集合和數組的集合名稱是容器。 –
如果VARI是一個局部變量,這是不可能的。 如果vari都是該類的成員,那麼可以通過使用Reflection API(參見方法Class.getField()和Class.getDeclaredField())來實現,但效率非常低。更好地使用集合,並找到其他選項。
它們添加到列表或數組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();
}
}
非常感謝你,我在 之前沒有這個想法 – Ayoub
FWIW,你想要什麼被稱爲反射(請參閱此[問題](http://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-usef)) – fxm