我有一个彩色枚举:
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
我该如何解决这个问题?任何帮助将不胜感激。
答案 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提供的信息,我很感激。