Skip to content
Advertisement

Using Enums with Hex Codes / Colors

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"
}
Advertisement