在Java8中一次修改几个字段变量

在Java8中一次修改几个字段变量,java,Java,我正在创建一个地图应用程序,它有一个类,包含用于绘制地图的所有颜色。颜色只是静态场变量。我需要实现一个色盲模式,我在想一个整洁的(而且高效的)解决方案是在课堂上获取我所有的颜色变量并修改它们 在Java 8中,是否有任何方法可以同时处理多个字段变量,或者我需要将它们添加到列表中并像那样运行它们?静态变量应该用于描述类的属性(例如实例计数器)。使用它们来包含实例的属性(尽管可能)是一个设计错误,随着应用程序的发展,它会给您带来很多麻烦 如果只需要地图的一个实例,请将其定义为一个实例。在任何情况下,

我正在创建一个地图应用程序,它有一个类,包含用于绘制地图的所有颜色。颜色只是静态场变量。我需要实现一个色盲模式,我在想一个整洁的(而且高效的)解决方案是在课堂上获取我所有的颜色变量并修改它们


在Java 8中,是否有任何方法可以同时处理多个字段变量,或者我需要将它们添加到列表中并像那样运行它们?

静态变量应该用于描述类的属性(例如实例计数器)。使用它们来包含实例的属性(尽管可能)是一个设计错误,随着应用程序的发展,它会给您带来很多麻烦

如果只需要地图的一个实例,请将其定义为一个实例。在任何情况下,我建议您不要将静态变量用于描述特定实例的事物(如特定地图的颜色)

关于如何使用一条语句分配多个字段,请查看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);
    }
}
import java.lang.reflect.*;
类颜色{
公共静态int COLOR1=123;
公共静态int COLOR2=321;
}
公共类Test3{
公共静态void modify(类clazz)抛出IllegalAccessException{
Field[]fields=clazz.getDeclaredFields();
用于(字段f:字段){
if(Modifier.isStatic(f.getModifiers())){
f、 setInt(f,666);
} 
}
}
公共静态void main(字符串[]args)引发异常{
System.out.println(“Before:+Colors.COLOR1”);
System.out.println(“Before:+Colors.COLOR2”);
修改(颜色.类别);
System.out.println(“之后:“+Colors.COLOR1”);
System.out.println(“后面:“+Colors.COLOR2”);
}
}
但我认为这不是一个干净的解决方案。这隐藏了依赖项,并不像OOP那样。您应该使用一个为每种颜色定义getter的接口。然后可以从这个接口实现两个类。一类用于普通颜色,另一类用于色盲颜色。
加载应用程序设置时,根据用户设置创建其中一个类的实例。

如果您能为我们提供一些基本场景(代码),那就太好了我们可以参考并提出建议。A会很有帮助。最好加强你的回答,告诉OP为什么这是个坏主意,以及你的建议如何解决她的问题。。。