2017-04-12 29 views
0

有人知道如何簡化從另一個類獲取多個變量的代碼,或有一個想法。 下面是我的程序的結構:循環來自另一個類的變量

Data.java 
//composed of 30 variables with almost the same variable name 
String dat1 = ""; 
String dat2 =""; 
. 
. 
. 
String dat30=""; 

Get.java 
//here, I need to get the variables from Data.java and put inside the loop 

for(int i=0; i<=30; i++) { 
String dat1 = getField(Data.dat1).getData(); 
} 

反正有環從另一大類DAT1〜dat30變量? 預先感謝您對於那些誰可以幫助;)

+8

不是創建30個單獨的變量,而是創建一個'List'或'String'數組,創建一個getter方法,將它公開在'Data'類中。 – azurefrog

+0

Duplicate http://stackoverflow.com/questions/2466038/how-do-i-iterate-over-class-members – svenmeier

+0

它不是重複的。我問的是有一種方法可以簡化獲取變量的代碼,因爲變量名稱幾乎相同。我無法更改Data.java。我只能修改Get.java。 – exceptione

回答

2

如果有可能,而不是存儲Data類的變量,然後在30級不同的變量保存像是dat1的,DAT2,...存儲那些像dat[30]數組。通過這樣做,您只需在循環中調用dat[i]即可訪問這些字段。

但是,如果無法存儲除了不同變量以外的字段,則可以使用Class.getField方法來按名稱獲取字段。在這種情況下,您可以通過調用getField("dat"+i)來獲得該字段。

+0

有很多選擇的好答案。 +1 –

3

您可以使用Java反射API來讀取Data對象中的值,如下圖所示:

Data data = new Data(); 
//load data object with values 

for(int i=1;i<=30;i++) {//iterate 
    Field f = data.getClass().getDeclaredField("data"+i);//get each field 
    f.setAccessible(true); 
    System.out.println((String)f.get(data));//read value 
} 

但是,我強烈建議你需要重組類以便它包含String[] dataList<String> data這將使事情變得更容易。

相關問題