J'ai une énumération SOME_ENUM
:
public enum SOME_ENUM {
EN_ONE,
EN_TWO,
EN_THREE;
}
Est-ce que SOME_ENUM.values()
toujours revenir les énumérations dans l'ordre des déclarations ENUM:
EN_ONE, EN_TWO, EN_THREE
? Est-ce une règle ou il n'est pas garanti qu'elle ne sera pas modifiée dans les prochaines versions de JDK?
java
enums
specifications
Skarab
la source
la source
Réponses:
La spécification du langage Java utilise ce langage explicite:
Donc, oui, ils seront retournés dans l'ordre de déclaration. Il convient de noter que l'ordre peut changer avec le temps si quelqu'un change de classe, alors soyez très prudent sur la façon dont vous l'utilisez.
la source
Oui, il est garanti de les retourner dans cet ordre.
Cependant, évitez de vous fier à cela et à la
ordinal()
valeur, car elle peut changer après l'insertion de nouveaux éléments, par exemple.la source
Il est déterminé par l'ordre dans lequel vos valeurs sont déclarées. Cependant, il n'y a aucune garantie que vous (ou quelqu'un d'autre) ne réorganiserez pas / n'insérerez / supprimerez pas les valeurs à l'avenir . Vous ne devriez donc pas vous fier à la commande.
Efficace Java 2nd. L'édition dédie son élément 31 à un sujet étroitement lié: utilisez les champs d'instance au lieu des ordinaux :
la source
enum
dans un but auquel il n'était pas destiné.Les autres réponses sont bonnes, mais ne commentez pas ceci:
Je ne crois pas qu'il existe des garanties sur les futurs JDK, donc vous ne devriez même pas vous en soucier. Il n'y aurait aucun moyen de les appliquer, les futurs responsables JDK pourraient simplement décider de renoncer à ces garanties. C'est comme le système parlementaire de Westminster: "Aucun Parlement ne peut lier un futur parlement".
Cela dit, l'histoire du JDK révèle une excellente cohérence. Ils n'apportent pas beaucoup de changements de rupture, vous pouvez donc être assez sûr que le comportement actuel spécifié (pas seulement observé) sera préservé.
la source