99 votes

enum.values () - est un ordre d'enum retourné déterministe

J'ai un enum SOME_ENUM :

 public enum SOME_ENUM 
{
  EN_ONE,
  EN_TWO,
  EN_THREE;
}
 

Est-ce que SOME_ENUM.values() renverra toujours les enums dans l'ordre des déclarations d'énumération: EN_ONE, EN_TWO, EN_THREE ? Est-ce une règle ou il n'est pas garanti que cela ne change pas dans les prochaines versions de Jdk?

138voto

GaryF Points 11921

La spécification de langage Java utilise ce langage explicite:

@return un tableau contenant les constantes de ce type enum, dans l'ordre dans lequel elles sont déclarées

Donc, oui, ils seront retournés dans l'ordre de la déclaration. Il convient de noter que l'ordre peut changer avec le temps si quelqu'un change de classe, soyez donc très prudent avec la façon dont vous l'utilisez.

16voto

Bozho Points 273663

Oui, il est garanti de les retourner dans cet ordre.

Cependant, vous devriez éviter de vous fier à cela et à la valeur ordinal() , car elle peut changer après l'insertion de nouveaux éléments, par exemple.

9voto

Péter Török Points 72981

Il est déterminé par l'ordre de vos valeurs sont déclarées dans. Cependant, il n'ya aucune garantie que vous (ou quelqu'un d'autre) de ne pas réorganiser / insérer / supprimer des valeurs dans l'avenir. Donc, vous ne devriez pas compter sur le bon de commande.

Efficace Java 2nd. Édition consacre son Article 31 de un étroitement liées sujet: Utilisation des champs d'instance au lieu de ordinaux:

Ne jamais dériver une valeur associée à une énumération de ses ordinal; le stocker dans un champ d'instance à la place.

7voto

Fletch Points 1497

Les autres réponses sont bonnes, mais ne faites pas de commentaires sur ce:

"Est-il une règle ou il n'est pas garanti pour ne pas être modifié dans la prochaine Jdk versions?"

Je ne crois pas que des garanties sur l'avenir de la Jdk existent, de sorte que vous ne devriez même pas vous en soucier. Il n'y aurait pas moyen de les faire respecter, à l'avenir JDK conduit pourrait simplement décider de reneg sur de telles garanties. C'est comme le système de Westminster du parlement: "Aucun Parlement ne peut se lier à une futur parlement."

Cela dit, l'histoire de la JDK révèle excellente cohérence. Ils ne font pas beaucoup de modifications importantes, de sorte que vous pouvez être assez confiant sur le fait que le courant spécifié (pas seulement observé) comportement sera préservée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X