10

假设您有以下枚举

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 2nd ed 中看到了 Bloch。在 getInstance() 行中提出了一些建议(第 1 章,第 1 项)。只是添加另一个选项。

4

3 回答 3

17

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

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

我不会使用getEnum,因为你没有得到它Enum本身,而是一个值。在这里使用forName()不合适,R不是 红色的名称。

我宁愿选择:

  • fromString()因为它与toString();
  • getColor()为了与 Java 标准库保持一致。
于 2013-10-06T15:17:37.047 回答
2

也请考虑以下事项!

Color fromName(String name);
Color fromShortName(String shortName);
Color fromCode(String code);
于 2013-10-09T19:37:13.630 回答
1

我会使用这对:

Color fromValue(String value)
String toValue()

这是我发现在我的枚举中最合适的东西。

于 2013-10-08T08:58:57.697 回答