I’m trying to use an enum to represent different colors from within the code. The idea is that I receive a hex code, ie #FF0000 of type String, and I want to associate that with a color value from an enum.
Something like:
- I accept the hex code “#FF0000”
- I look at my ColorList enum, and see that #FF0000 is associated with RED
- I get the RED value from the enum
So I’m thinking it has to be something like this:
public enum ColorList {
RED("#FF0000")
ORANGE("FFA500")
private String value;
public String getValue() { return value; }
ColorList(String value) { this.value = value; }
}
public void handleColor(String hexColor) {
// hexColor is = "#FF0000"
ColorList myColor = ColorList.valueOf(hexColor);
doWithColor(myColor);
}
public void doWithColor(ColorList myColor) {
System.out.println(myColor.name());
// I expect RED
System.out.println(myColor.getValue());
// I expect "#FFEDAB"
}
Not sure how to fill in the gaps here. I think the only issue is trying to get the ENUM from an arbitrary value (the hex code), so I can’t just use valueOf(hexColor).
Advertisement
Answer
You can do something like :
public enum ColorList {
RED("#FF0000"),
ORANGE("FFA500");
private String value;
public String getValue() { return value; }
ColorList(String value) { this.value = value; }
public static ColorList fromHex(String hexColor) {
// if needed instead of loop,
// you can create a static map to search by hex code
for (ColorList color : ColorList.values()) {
if (color.getValue().equals(hexColor)) {
return color;
}
}
return null;
}
// I'm not sure if you need this function.
public static ColorList fromHexOrName(String hexOrName) {
// search by Hexadecimal value
ColorList color = fromHex(hexOrName);
if (color != null) {
return color;
}
// else search by name
try {
return ColorList.valueOf(hexOrName);
}catch (IllegalArgumentException | NullPointerException e) {
return null;
}
}
}
public void handleColor(String hexColor) {
// hexColor is = "#FF0000"
ColorList myColor = ColorList.fromHex(hexColor);
// OR this call below if needed :
// ColorList myColor = ColorList.fromHexOrName(hexColor);
doWithColor(myColor);
}
public void doWithColor(ColorList myColor) {
System.out.println(myColor.name());
// I expect RED
System.out.println(myColor.getValue());
// I expect "#FFEDAB"
}