Значение по умолчанию или начальное значение для массива enum java
Скажем, у меня есть enum public enum Day { MONDAY, TUESDAY, ..., SUNDAY }
, затем я создаю массив дней Day[] days = Day[3];
.
Как сделать день (например, MONDAY
) значением по умолчанию для всех дней в days
? Если настроено, как указано выше, все элементы day
равны нулю. Я хочу, чтобы enum вел себя как ints и Strings, которые инициализируются соответственно 0 и "".
Ответы
Ответ 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 + '}';
}
}