web-dev-qa-db-fra.com

Valeur par défaut ou initiale pour un tableau enum Java enum

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 "".

36
Tanis.7x

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.

77
Jon Skeet

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);
7
Stephen Denne

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.

6
jzd

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;
}
1
Matt Ball

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.

0
TheBinaryhood