我有一个名为ColorConstants
的类,它只是一个定义了我的应用程序中使用的public static final Color
个字段的类 - 可以很容易地改变颜色方案等。我想做的是有两种方案:倒置,不倒置。我想设置这个类,以便相同的字段名称可以引用不同的颜色,具体取决于方案/主题。而不是每次检查/获得必要的颜色。
我之前从未使用enum
,只是想知道它是否适合这个?
或者,我只是将字段设为非最终字段并使用setAll(int theme)
方法。
答案 0 :(得分:2)
我不会在这里使用枚举。
我会创建一个包含所有颜色字段(非最终)的类,但没有值。并创建扩展类,定义构造函数中的所有颜色。
public abstract class ColorScheme
{
public Color background;
public Color foreground;
public Color cursor;
}
现在创建ColorScheme的实现:
public class DarkColorScheme extends ColorScheme
{
public DarkColorScheme()
{
background = new Color(0x111111);
foreground = new Color(0xDDDDDD);
cursor = new Color(0xEEEEEE);
}
}
现在,您可以使用以下颜色方案:
public ColorScheme colorScheme = new DarkColorScheme();
从现在开始,您可以创建额外的配色方案,只需在新colorscheme上方的行中使用,一切都应该动态运行。
答案 1 :(得分:1)
我用至少一个枚举实现它,如果不是两个枚举。一个用于ColorScheme
,另一个用于Color
。 ColorScheme
将(开始)两个元素,每个元素都可以“知道”其组成颜色。松散的例子:
enum ColorScheme {
NORMAL(Color.RED, Color.GREEN, Color.BLUE),
INVERTED(Color.CYAN, Color.MAGENTA, Color.YELLOW);
private final Set<Color> colors;
public ColorScheme(Color... cs) {
this.colors = EnumSet.of(cs)
}
}
答案 2 :(得分:0)
设置对象的值与您使用枚举的事实无关。
使用原始常量或枚举可以获得相同的结果。在我看来你应该使用枚举,因为这种方式更容易知道哪些常量可用,而且你确保调用你的方法的人确实只向你发送枚举中定义的常量。