Valeur par défaut ou initiale pour un tableau java enum
Disons que j'ai un enum public enum Day { MONDAY, TUESDAY, ..., SUNDAY }
, puis j'instancie un tableau de jour Day[] days = Day[3];
.
Comment faire un jour (par exemple MONDAY
) la valeur par défaut pour tous les jours dans days
? Si configuré comme ci-dessus, tous les éléments de day
sont null. Je veux que par enum se comporte plus comme des ints et des chaînes, qui s'initialisent à 0 et "" respectivement.
5 réponses
Comme d'autres l'ont dit, les enums sont des types de référence - ils ne sont que du sucre syntaxique du compilateur pour des classes spécifiques. La JVM n'en a aucune connaissance. Cela signifie que la valeur par défaut pour le type est null. Cela n'affecte pas seulement les tableaux, bien sûr-cela signifie que la valeur initiale de tout champ dont le type est une énumération est également nulle.
Cependant, vous n'avez pas besoin de faire une boucle pour remplir le tableau, car il existe une méthode de bibliothèque pour aider:
Day[] days = new Day[3];
Arrays.fill(days, Day.MONDAY);
Je ne sais pas qu'il y en a performance avantage à cela, mais cela rend le code plus simple.
Vous pouvez créer le tableau rempli de valeurs:
Day[] days = {Day.MONDAY, Day.MONDAY, Day.MONDAY};
Vous pouvez également créer une méthode statique dans l'énumération pour renvoyer un tableau de la valeur par défaut:
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);
Les classes comme Enum sont initialisées à null
. Tout comme les classes, vous devez définir une valeur dans chaque position en utilisant une boucle.
Java ne le fera pas par défaut. Vous devez remplir explicitement le tableau:
final Day DEFAULT_DAY = Day.MONDAY;
Day[] days = Day[3];
for (int i = 0; i<days.length; i++)
{
days[i] = DEFAULT_DAY;
}
La seule façon de le faire serait de faire une boucle dans le tableau et de définir chacun sur Lundi ou 0.
for (int i = 0; i < days.length; i++)
{
day[i] = Days.Monday
}
Et c'est aussi une bonne chose de mettre Monday = 0 dans votre énumération afin que vous sachiez quel int vous sortirez des valeurs lorsque vous les Lancez.