颜色代码枚举

时间:2018-06-16 09:28:33

标签: java android enums colors

我有一个彩色枚举:

public enum Color {
    YELLOW(0), RED(1), GREEN(2), BLUE(3), GRAY(4), CYAN(5), BLACK(6), MAGENTA(7);

    int colorCode;

    Color(int colorCode) {
        this.colorCode = colorCode;
    }

    public int getColorCode() {
        return this.colorCode;
    }

    public Color getColor(int colorCode) {
        return Color.this.colorCode;
    }
}

我想根据colorCode返回一个Color,但是我得到了一个异常

incompatibles Types int and Color

我该如何解决这个问题?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您可以使用:

public static Color getColor(int colorCode) {
    for (Color c : Color.values()) {
        if (c.getColorCode() == colorCode)
            return c;
    }
    return NOT_DEFINE;
}

注意我定义了另一个枚举NOT_DEFINE(8),以防代码没有退出并在getColor的末尾返回。

但我想创建一个包含Map<colorCode, Color>的地图,以便您可以轻松地使用键获取颜色,而不会每次都循环使用枚举值

static Map<Integer, Color> mapOfColord = new HashMap<>();

static {
    Map<Integer, Color> colors = new HashMap<>();
    for (Color color : Color.values()) {
        colors.put(color.colorCode, color);
    }
    mapOfColord = Collections.unmodifiableMap(colors);
}

或者您可以坚持使用第一个获取键并返回颜色的方法:

private static Map<Integer, Color> mapOfColord = new HashMap<>();

static {
    for (Color color : Color.values()) {
        mapOfColord.put(color.colorCode, color);
    }
}

public static Color getColor(Integer key) {
    return mapOfColord.get(key);
}

所以你可以像这样得到颜色:

int key = 3;
Color blue = Color.mapOfColord.get(key);

或者:

Color blue = Color.getColor(key);

感谢@Andy Turner提供的信息,我很感激。