不要在枚举字段内排序

问题描述 投票:1回答:4

如何在eclipse 3.7中禁用枚举中的值排序?我依赖于枚举条目的顺序,因此每次我点击排序时都会折断我的脖子。

enum X {C,B,A}在击中排序成员后变成enum X {A,B,C}

java eclipse sorting enums code-formatting
4个回答
5
投票
后变成枚举X {A,B,C}

Windows>首选项> Java>编辑器>保存操作>其他操作>配置>成员>对成员排序>选择“忽略字段和枚举常量“

窗口>首选项> Java>代码样式>清理>编辑>代码组织>成员>对成员排序>选择“忽略字段和枚举常量”]

但是您实际上不应该根据枚举的声明顺序进行编码。这是完全错误的。


3
投票

停止依赖于枚举条目的顺序。这将导致比您要处理的错误更多的错误。

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

  1. 这是一场维护噩梦。如果其他人(或日食)对您的枚举进行重新排序,则需要检查整个程序的影响。
  2. 您不能添加具有相同int值的多个枚举。
  3. 您必须插入与任何合法函数都不对应的虚拟枚举,才能获得所需的ordinal()返回值。
  4. 您不能在不破坏顺序映射的情况下在列表中的任意点插入枚举,同样也不能删除枚举。

相反,扩展枚举以正确包含一个值,如下所示:

public enum Departments {
   SALES(101),
   ACCOUNTING(200),
   MANAGEMENT(300);

   private final int deptNumber;

   Departments(int number) {
     deptNumber = number;
   }

   public int departmentNumber() {
     return deptNumber;
   }
}

2
投票

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

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

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

这会更安全。


0
投票

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

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

    private Enum(int ordinal)
    {
        if (this.ordinal() != ordinal)
        {
            throw new BadEnumerationException(ordinal);
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.