gpt4 book ai didi

Java - 枚举 valueOf "override"命名约定

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:08:39 25 4
gpt4 key购买 nike

假设您有以下枚举:

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

最佳答案

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

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

我不会使用 getEnum,因为您获取的不是 Enum 本身,而是一个值。在这里使用 forName() 是不合适的,R 不是红色的name

我宁愿选择:

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

关于Java - 枚举 valueOf "override"命名约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19153569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com