【问题标题】:enum of Color Codes颜色代码的枚举
【发布时间】:2018-06-16 09:28:32
【问题描述】:

我有一个 Color 枚举:

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;
    }
}

我想根据颜色代码返回一个颜色,但我遇到了一个异常

incompatibles Types int and Color

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

【问题讨论】:

  • 枚举具有与每个值关联的“序数”数字。 Ordinal 对应“定义索引”,所以你可以简单地写Color.values()[index] 得到Color 在指定索引处。

标签: java android enums colors


【解决方案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提供的信息,非常感谢。

【讨论】:

  • 您也应该将该方法设为静态。在任何情况下,你都不应该通过这个引用NOT_EXIST
  • 您不希望它成为实例方法。这意味着您需要一个 Color 实例来调用该方法以从 int 中获取 Color 的实例。
  • 您同样希望地图是静态的,这样您就没有每个​​枚举值的地图副本。
  • @YCL_L 鉴于它是您正在初始化的静态字段,请使用静态初始化程序。
  • @YCF_L 您还应该使地图不可修改,或者只公开一种获取颜色的方法。否则,您可以更改地图中的值(例如,使用 Color.mapOfColord.clear() 将它们全部删除)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-08
  • 2023-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多