2011-10-31 122 views
1

我有這個類中的Java中,我申報了大量的變量(超過50個)爲:將類變量存儲到數組中?

 

    public static final String variable_1 = "value"; 
    .... 

我想訪問所有這些變量並把它們放在一個列表從另一個類中。有沒有通過使用for循環來做到這一點的方法?

+2

將它們存儲在數組中聽起來對我來說毫無用處。 – mre

+2

它在這裏聞到一個'每日WTF':P –

+0

靜態final字段可以由編譯器內聯。這意味着你可以使用反射來改變它們,但是使用常量的代碼不再將它們引用到運行時。 –

回答

0

您可以使用反射API,像這樣:

for (Field f : MyClass.class.getDeclaredFields()) { 
    if (f.getName().startsWith("variable_")) { 
     System.out.println("Field " + f.getName() + " with value " + f.get(null)); 
    } 
} 

正如其他人說,雖然,這是非常醜陋的,可能表明一些不好的設計決策。

+0

不是我的設計...我知道它是這樣的..我suppossed擴大它...但不改變現有的代碼 – schmimona

2

只有通過reflection才能做到這一點,而無需明確引用每個變量。

話雖如此,更好的方法是重構您的代碼,以便您不必這樣做。

1

您可以使用反射來掃描您班級的成員,並使用"variable_"這樣的模式來匹配名稱。

1

如果你有50個,它們是相關的常量,它們應該由一個枚舉(或幾個枚舉(取決於常量)表示)。然後這將通過values()方法提供一個自然分組和訪問列表。

你目前正在嘗試聽起來像是一種代碼味道。