假设您有以下枚举:
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项)。 只是添加另一个选项。
答案 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()
这是我发现最适合我的枚举的内容。