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.

32
demandé sur Tanis.7x 2011-01-12 02:55:35

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.

69
répondu Jon Skeet 2011-01-12 00:01:34

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);
6
répondu Stephen Denne 2011-01-12 00:30:19

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.

5
répondu jzd 2011-01-11 23:59:35

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
répondu Matt Ball 2011-01-11 23:59:31

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.

0
répondu TheBinaryhood 2011-01-12 00:01:22