Le plus Une raison valable commune pour vouloir une constante entière associée à chaque valeur enum est d'interopérer avec un autre composant qui attend toujours ces entiers (par exemple un protocole de sérialisation que vous ne pouvez pas changer, ou les énumérations représentent des colonnes dans une table, etc.).
Dans presque tous les cas, je suggère d'utiliser un EnumMap
à la place. Il découble les composants plus complètement, si cela était le problème, ou si les énumérations représentent des index de colonnes ou quelque chose de similaire, vous pouvez facilement faire des changements plus tard (ou même au moment de l'exécution si besoin est).
private final EnumMap<Page, Integer> pageIndexes = new EnumMap<Page, Integer>(Page.class);
pageIndexes.put(Page.SIGN_CREATE, 1);
//etc., ...
int createIndex = pageIndexes.get(Page.SIGN_CREATE);
C'est aussi incroyablement efficace, aussi.
L'ajout de données de ce type à l'instance enum elle-même peut être très puissant, mais il est le plus souvent abusé.
Edit: Bloch vient de réaliser cette adresse dans Effective Java/2ème édition, en Point 33: Utilisation EnumMap
au lieu de l'indexation ordinale.
Ce ne compilera pas; vous avez défini "SIGN_CREATE" deux fois. En outre, ce ne sont pas des constantes - elles ne sont pas "définitives". – BlairHippo