我有這個類中的Java中,我申報了大量的變量(超過50個)爲:將類變量存儲到數組中?
public static final String variable_1 = "value"; ....
我想訪問所有這些變量並把它們放在一個列表從另一個類中。有沒有通過使用for循環來做到這一點的方法?
我有這個類中的Java中,我申報了大量的變量(超過50個)爲:將類變量存儲到數組中?
public static final String variable_1 = "value"; ....
我想訪問所有這些變量並把它們放在一個列表從另一個類中。有沒有通過使用for循環來做到這一點的方法?
您可以使用反射API,像這樣:
for (Field f : MyClass.class.getDeclaredFields()) {
if (f.getName().startsWith("variable_")) {
System.out.println("Field " + f.getName() + " with value " + f.get(null));
}
}
正如其他人說,雖然,這是非常醜陋的,可能表明一些不好的設計決策。
不是我的設計...我知道它是這樣的..我suppossed擴大它...但不改變現有的代碼 – schmimona
只有通過reflection才能做到這一點,而無需明確引用每個變量。
話雖如此,更好的方法是重構您的代碼,以便您不必這樣做。
您可以使用反射來掃描您班級的成員,並使用"variable_"
這樣的模式來匹配名稱。
如果你有50個,它們是相關的常量,它們應該由一個枚舉(或幾個枚舉(取決於常量)表示)。然後這將通過values()方法提供一個自然分組和訪問列表。
你目前正在嘗試聽起來像是一種代碼味道。
將它們存儲在數組中聽起來對我來說毫無用處。 – mre
它在這裏聞到一個'每日WTF':P –
靜態final字段可以由編譯器內聯。這意味着你可以使用反射來改變它們,但是使用常量的代碼不再將它們引用到運行時。 –