Не сортировать внутри поля enum - PullRequest
1 голос
/ 20 февраля 2012

Как я могу отключить сортировку значений в перечислении в Eclipse 3.7?Я полагаюсь на порядок записей enum, поэтому каждый раз, когда я нажимаю сортировку, это ломает шею.

enum X {C,B,A} превращается в enum X {A,B,C} после удара по членам сортировки.

Ответы [ 3 ]

5 голосов
/ 20 февраля 2012

Windows> Настройки> Java> Редактор> Сохранить действия> Дополнительные действия> Настроить> Члены> Сортировать участников> Выберите «Игнорировать поля и константы перечисления»

или

Окно> Настройки> Java> Стиль кода> Очистить> Правка> Организация кода> Члены> Члены сортировки> Выберите «Игнорировать поля и константы перечисления»

Но вам действительно не следует кодироватьна основании заказа объявляются перечисления.Это просто неправильно.

3 голосов
/ 20 февраля 2012

Прекратите полагаться на порядок перечисления записей.Это приведет к большему количеству ошибок, чем вы можете себе позволить.

Поскольку кодирование зависит от порядка перечисления, вы неявно вызываете функцию 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 голосов
/ 20 февраля 2012

Я не думаю, что полагаться на позиционно-зависимый код - это хорошая идея.Поскольку Enums можно считать классами в Java, почему бы вам не указать свой конкретный идентификатор?

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

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

Это будет намного безопаснее.

...