Значение по умолчанию или начальное значение для массива перечислений java - PullRequest
36 голосов
/ 12 января 2011

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

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

Ответы [ 5 ]

76 голосов
/ 12 января 2011

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

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

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

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

6 голосов
/ 12 января 2011

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

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);
6 голосов
/ 12 января 2011

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

1 голос
/ 12 января 2011

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

final Day DEFAULT_DAY = Day.MONDAY;
Day[] days = Day[3];
for (int i = 0; i<days.length; i++)
{
    days[i] = DEFAULT_DAY;
}
0 голосов
/ 12 января 2011

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

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

И еще хорошо, если в вашем перечислении есть Monday = 0, чтобы вы знали, что int вы получите из значений при их приведении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...