我正在創建一個具有用於繪製地圖的所有顏色的類的地圖應用程序。顏色只是靜態字段變量。我需要實現colourblind模式,並且我認爲一個整潔的(和時間有效的)解決方案是將所有我的顏色變量放在課程中並修改它們。在Java 8中一次修改多個字段變量
有什麼辦法能夠一次處理多字段變量在Java中8,或者我需要他們一樣,添加到列表中,並運行通過他們?
我正在創建一個具有用於繪製地圖的所有顏色的類的地圖應用程序。顏色只是靜態字段變量。我需要實現colourblind模式,並且我認爲一個整潔的(和時間有效的)解決方案是將所有我的顏色變量放在課程中並修改它們。在Java 8中一次修改多個字段變量
有什麼辦法能夠一次處理多字段變量在Java中8,或者我需要他們一樣,添加到列表中,並運行通過他們?
靜態變量應該被用來描述類(例如一個實例計數器)的屬性。儘管可能,使用它們來包含實例的屬性是一個設計錯誤,隨着您的應用程序的發展,它會帶來很多麻煩。
如果您需要的地圖只有一個實例,它定義爲Singleton。無論如何,我建議你不要將靜態變量用於描述特定實例的東西(比如特定地圖的顏色)。
關於如何分配多領域的一個說法,在這裏看一看的BeanUtils#copyProperties:
爲此,您可以使用反射,但要知道所有可能的異常:
import java.lang.reflect.*;
class Colors {
public static int COLOR1 = 123;
public static int COLOR2 = 321;
}
public class Test3 {
public static void modify(Class<?> clazz) throws IllegalAccessException {
Field[] fields = clazz.getDeclaredFields();
for (Field f : fields) {
if (Modifier.isStatic(f.getModifiers())) {
f.setInt(f, 666);
}
}
}
public static void main(String[] args) throws Exception {
System.out.println("Before: " + Colors.COLOR1);
System.out.println("Before: " + Colors.COLOR2);
modify(Colors.class);
System.out.println("After: " + Colors.COLOR1);
System.out.println("After: " + Colors.COLOR2);
}
}
但我不認爲這是一個乾淨的解決方案。這隱藏了依賴關係,並不像OOP那樣。您應該使用爲每種顏色定義getter的接口。然後你可以從這個接口實現兩個類。一類爲普通顏色,另一類爲色盲顏色。 加載應用程序設置時,根據用戶設置創建其中一個類的實例。
這將是很好,如果你可以給我們一些基礎scenrio(代碼),這是我們可以參考和提出建議。 – Smit
A [Minimal,Complete,Verifiable example](https://stackoverflow.com/help/mcve)會很有幫助。你是否讀過OP使用* static *變量的 –