Disons que j'ai une énumération public enum Day { MONDAY, TUESDAY, ..., SUNDAY }
, puis j'instancie un tableau de jours Day[] days = Day[3];
.
Comment définir un jour (par exemple MONDAY
) comme valeur par défaut pour tous les jours dans days
? S'il est configuré comme ci-dessus, tous les éléments de day
sont nuls. Je veux que par enum se comporte plus comme des entiers et des chaînes, qui s'initialisent respectivement à 0 et "".
Comme d'autres l'ont dit, les énumérations sont des types de référence - ce ne sont que du sucre syntaxique de compilation pour des classes spécifiques. La JVM n'en a aucune connaissance. Cela signifie que la valeur par défaut du 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 à vous boucler pour remplir le tableau, car il existe une méthode de bibliothèque pour vous aider:
Day[] days = new Day[3];
Arrays.fill(days, Day.MONDAY);
Je ne sais pas s'il y 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};
Alternativement, vous pouvez 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 similaires à enum sont initialisées à null
. Tout comme les classes, vous devez définir une valeur dans chaque position à l'aide d'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 savoir comment procéder serait de simplement parcourir 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 ce que vous obtiendrez des valeurs lorsque vous les lancerez.