Подтвердить что ты не робот

Значение по умолчанию или начальное значение для массива enum java

Скажем, у меня есть enum public enum Day { MONDAY, TUESDAY, ..., SUNDAY }, затем я создаю массив дней Day[] days = Day[3];.

Как сделать день (например, MONDAY) значением по умолчанию для всех дней в days? Если настроено, как указано выше, все элементы day равны нулю. Я хочу, чтобы enum вел себя как ints и Strings, которые инициализируются соответственно 0 и "".

4b9b3361

Ответ 1

Как говорили другие, перечисления являются ссылочными типами - они всего лишь синтаксический сахар компилятора для определенных классов. JVM не знает о них. Это означает, что значение по умолчанию для типа равно null. Это, конечно, не просто влияет на массивы - это означает, что начальное значение любого поля, тип которого является перечислением, также равно null.

Однако вам не нужно зацикливаться на себе, чтобы заполнить массив, так как там есть метод библиотеки:

Day[] days = new Day[3];
Arrays.fill(days, Day.MONDAY);

Я не знаю, что есть какое-то преимущество в производительности, но это упрощает код.

Ответ 2

enum like classes инициализируются на null. Как и классы, вам нужно установить значение в каждой позиции с помощью цикла.

Ответ 3

Вы можете создать массив, заполненный значениями:

Day[] days = {Day.MONDAY, Day.MONDAY, Day.MONDAY};

В качестве альтернативы вы можете создать статический метод в перечислении, чтобы вернуть массив значения по умолчанию:

enum Day { MONDAY, TUESDAY, SUNDAY; 
    public static Day[] arrayOfDefault(int length) {
        Day[] result = new Day[length];
        Arrays.fill(result, MONDAY);
        return result;
    }
}

Day[] days = Day.arrayOfDefault(3);

Ответ 4

Java не будет делать это по умолчанию. Вы должны явно заполнить массив:

final Day DEFAULT_DAY = Day.MONDAY;
Day[] days = Day[3];
for (int i = 0; i<days.length; i++)
{
    days[i] = DEFAULT_DAY;
}

Ответ 5

Единственный способ, которым я знаю, как это сделать, - просто провести цикл по массиву и установить каждый в понедельник или 0.

for (int i = 0; i < days.length; i++)
{
day[i] = Days.Monday
}

И его также хорошая вещь, чтобы положить понедельник = 0 в ваш перечисление, чтобы вы знали, что вы выберете из значений, когда вы их произнесете.

Ответ 6

По внешнему виду конструкция Java enum выглядит обманчиво простой. Но на самом деле Java enum - полноценный класс, который является достаточно мощным и богатым.

Вы можете добавить вложенное перечисление Type в Days, чтобы определить, какой тип экземпляра Days по умолчанию.

/**
 * Example of Days enum
 * @author Awan Biru
 */
enum Days {

    MONDAY("Monday", Type.WEEKDAYS),
    TUESDAY("Tuesday", Type.WEEKDAYS),
    WEDNESDAY("Wednesday", Type.WEEKDAYS),
    THURSDAY("Thursday", Type.WEEKDAYS),
    FRIDAY("Friday", Type.DEFAULT),
    SATURDAY("Saturday", Type.WEEKEND),
    SUNDAY("Sunday", Type.WEEKEND);

    private final String name;
    private final Type type;

    private Days(String nm, Type dt){
        name = nm;
        type = dt;
    }

    public static Days getDefaultDay() {
        return FRIDAY;
    }

    private enum Type{   

        WEEKDAYS(){
            @Override
            public String toString(){
                return "Weekdays";
            }
        },
        WEEKEND{
            @Override
            public String toString(){
                return "Weekend";
            }
        },
        DEFAULT{
            @Override
            public String toString(){
                return "Default";
            }
        };
    }

    @Override
    public String toString() {
        return "Days{" + "name=" + name + ", type=" + type + '}';
    }
}