【发布时间】:2013-10-03 07:43:40
【问题描述】:
假设你有以下枚举:
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);
}
}
由于 enum 是一种特殊情况,当您不能只覆盖 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 项)。 只是为了添加另一个选项。
【问题讨论】:
-
即使重载也保持相同的名称,但会改变签名。这听起来像是我们在谈论完全不同的名字......
-
伙计们......我们正在谈论枚举。您不能覆盖 valueOf() 和 values()。我将更改标题以指出这一点。但是请删除你的反对票并给我一个答案。
-
让我看看我明白了:你在问如何命名一个方法,我们暂时称它为“foo”,它将得到一个字符串(“R”、“G”或“B ") 并将返回正确的 Color.RED/Color.Blue/Color.Green?
-
正确,埃拉德。一个将完全返回的工厂方法。我不介意“foo”是惯例,但我对此表示怀疑。
标签: java enums naming-conventions value-of