Java - 枚举valueOf“覆盖”命名约定

时间:2013-10-03 07:43:40

标签: java enums naming-conventions value-of

假设您有以下枚举

public enum Color {
    RED("R"), GREEN("G"), BLUE("B");
    private String shortName;

    private Color(String shortName) {
        this.shortName = shortName;
    }

    public static Color getColorByName(String shortName) {
        for (Color color : Color.values()) {
            if (color.shortName.equals(shortName)) {
                return color;
            }
        }
        throw new IllegalArgumentException("Illegal color name: " + shortName);
    }
}

由于枚举是一种特殊情况,当你不能只覆盖valueOf函数时,绕过这个并实现valueOf(String name)的命名约定是什么?

getColorByName(String name)
getValueOf(String name)
permissiveValueOf(String name)
customValueOf(String name)
forName(String name)
getEnum(String name)
getColor(String name)

后来编辑: 我在Effective Java第二版中看到了Bloch。提出了一些getInstance()(第1章,第1项)。 只是添加另一个选项。

3 个答案:

答案 0 :(得分:16)

你绝对是对的,你不能覆盖Enum#valueOf(),因为它是Enum类的静态方法。

我认为没有命名约定。正如您已经指出的那样,Java中的例子很少:

我不会使用getEnum,因为您没有获得Enum本身,而是获取值。 在此处使用forName()不合适,R不是红色的名称

我宁愿选择:

  • fromString()因为它与toString();
  • 相反
  • getColor()与Java标准库保持一致。

答案 1 :(得分:2)

请考虑以下内容!

Color fromName(String name);
Color fromShortName(String shortName);
Color fromCode(String code);

答案 2 :(得分:1)

我会使用这对:

Color fromValue(String value)
String toValue()

这是我发现最适合我的枚举的内容。