使用枚举序数是一种好习惯吗?

新手上路,请多包涵

我有一个枚举:

 public enum Persons {

    CHILD,
    PARENT,
    GRANDPARENT;

}

使用 ordinal() 方法检查枚举成员之间的“层次结构”有什么问题吗?我的意思是 - 使用它时是否有任何缺点,除了冗长,当有人将来可能会意外更改顺序时。

或者做这样的事情更好:

 public enum Persons {

    CHILD(0),
    PARENT(1),
    GRANDPARENT(2);

    private Integer hierarchy;

    private Persons(final Integer hierarchy) {
        this.hierarchy = hierarchy;
    }

    public Integer getHierarchy() {
        return hierarchy;
    }

}

原文由 ByeBye 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 331
2 个回答

TLDR:不,你不应该!

如果您在 Enum.java 中参考 ordinal 方法的 javadoc:

大多数程序员不会用到这个方法。它专为复杂的基于枚举的数据结构而设计,例如 java.util.EnumSetjava.util.EnumMap

首先 - 阅读手册(在本例中为 javadoc)。

其次 - 不要编写脆弱的代码。枚举值将来可能会更改,您的第二个代码示例更加 清晰 和可 _维护_。

如果在 PARENTGRANDPARENT 之间插入一个新的枚举值,你肯定不想为将来制造问题。

原文由 vikingsteve 发布,翻译遵循 CC BY-SA 4.0 许可协议

正如 Joshua Bloch 在 Effective Java 中所建议的那样,从序数派生与枚举关联的值不是一个好主意,因为更改枚举值的顺序可能会破坏您编码的逻辑。

您提到的第二种方法完全遵循作者的建议,即将值存储在单独的字段中。

我会说你建议的替代方案肯定更好,因为它更可扩展和可维护,因为你正在解耦枚举值的排序和层次结构的概念。

原文由 msf1013 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题