不要在枚举字段内排序

时间:2012-02-20 15:27:47

标签: java eclipse sorting enums code-formatting

如何在eclipse 3.7中的枚举中禁用排序值?我依赖于enum条目的顺序,所以每当我点击排序时这都会打断我的脖子。

在点击排序成员后,

enum X {C,B,A}变为enum X {A,B,C}

4 个答案:

答案 0 :(得分:5)

  

Windows>偏好> Java>编辑>保存操作>额外   行动>配置>会员>对会员排序>选择“忽略字段   和Enum常数“

  

窗口>偏好> Java>代码风格>清理>编辑>代码组织>会员>对会员排序>选择“忽略字段和枚举常量”

但是你真的不应该根据枚举声明的顺序进行编码。这完全是错的。

答案 1 :(得分:3)

停止依赖枚举条目的排序。这将导致比你想要处理的更多错误。

通过编码依赖于枚举的顺序,您隐式调用枚举类的ordinal()函数(返回一个int)。这有以下缺点:

  1. 这是一场维护噩梦。如果其他人(或eclipse)重新排序您的枚举,则需要检查整个程序的影响。
  2. 您无法添加具有相同int值的多个枚举。
  3. 您必须插入与无合法功能相对应的虚拟枚举,才能获得所需的ordinal()返回值。
  4. 您无法在不破坏序号映射的情况下在列表中的任意点插入枚举,同样也无法删除枚举。
  5. 相反,展开你的枚举以正确包含一个值,如下所示:

    public enum Departments {
       SALES(101),
       ACCOUNTING(200),
       MANAGEMENT(300);
    
       private final int deptNumber;
    
       Departments(int number) {
         deptNumber = number;
       }
    
       public int departmentNumber() {
         return deptNumber;
       }
    }
    

答案 2 :(得分:2)

我不认为依赖位置相关代码是一个好主意。由于Enums可以被认为是Java中的类,为什么不定义您的特定ID?

enum Enum
{
    A(0),
    B(1),
    C(2);

    public final int id;
    Enum(int id) { this.id = id; };
}

这会更加安全。

答案 3 :(得分:0)

我使用异常来检测是否无意更改了枚举的顺序:

enum Enum
{
    A(0),
    B(1),
    C(2);

    private Enum(int ordinal)
    {
        if (this.ordinal() != ordinal)
        {
            throw new BadEnumerationException(ordinal);
        }
    }
}