我应该在这里使用枚举吗?

时间:2011-12-26 23:43:52

标签: java enums

我有一个名为ColorConstants的类,它只是一个定义了我的应用程序中使用的public static final Color个字段的类 - 可以很容易地改变颜色方案等。我想做的是有两种方案:倒置,不倒置。我想设置这个类,以便相同的字段名称可以引用不同的颜色,具体取决于方案/主题。而不是每次检查/获得必要的颜色。

我之前从未使用enum,只是想知道它是否适合这个? 或者,我只是将字段设为非最终字段并使用setAll(int theme)方法。

3 个答案:

答案 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,另一个用于ColorColorScheme将(开始)两个元素,每个元素都可以“知道”其组成颜色。松散的例子:

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)

设置对象的值与您使用枚举的事实无关。

使用原始常量或枚举可以获得相同的结果。在我看来你应该使用枚举,因为这种方式更容易知道哪些常量可用,而且你确保调用你的方法的人确实只向你发送枚举中定义的常量。