Как проинициализировать объекты enum вне класса

167
03 ноября 2019, 14:50

1.Почему в конструктор объекта Enum нельзя передать значение позже (не в самом классе где он автоматически создается)?

2.Почему в енамах нет hashcode equals?

Answer 1
По первому вопросу:

Используйте следующую запись:

Cat cat = Cat.Tom;

Если вы хотите добавить конструкторы, то их нужно объявлять неосредтсвенно в самом enum:

public enum Cat {
    TOM(1),
    BOB(2);
    private int number;
    Cat(int number) {
        this.number = number;
    }
    public int getNumber() {
        return number;
    }
}

Вызывать конструкторы вне определения enum нельзя, так как грубо говоря enum - список именованых констант.

Другими словами, можете воспринимать enum как нечто вроде этого:

public final class Cat extends java.lang.Enum {
   public final static Cat TOM = new Cat(1);
   public final static Cat BOB = new Cat(2);
   private int number;
   private Cat(int number) {
       this.number = number;
   }
   public int getNumber() {
       return number;
   }
}
По второму вопросу

Enum классы имеют hashCode и equals, просто их нельзя переопределить.

Можете убедится в этом вызвав:

int hash = Cat.TOM.hashCode();

и

boolean val = Cat.TOM.equals(Cat.BOB);
READ ALSO
Упростить код создания массивов

Упростить код создания массивов

Поскажите пожалуйста, можно ли упростить такой код? Или так и писать на 20 Case?

178
JFrame и JPanel в JAVA. не все отрисовываются

JFrame и JPanel в JAVA. не все отрисовываются

мое задание - написать имитацию тараканьих бегову меня есть такие классы: Game - основной класс, создает JFrame и принимает входной параметр (количество...

170
Не работаєт @NotNull

Не работаєт @NotNull

@NotNull это аннатоция из пакета javaxvalidation

144
Алгоритм генерации уникальных чисел

Алгоритм генерации уникальных чисел

Есть число N, необходимо найти все уникальные числа до 0 до NНапример из чисел 123,132,213,231,312,321 уникальным будет только любое одно, но если N = 321, то скорее...

169