La raison la plus courante pour laquelle on souhaite avoir une constante entière associée à chaque valeur d'enum est l'interopérabilité avec un autre composant qui attend toujours ces entiers (par exemple, un protocole de sérialisation que vous ne pouvez pas changer, ou les enums représentent des colonnes dans une table, etc).
Dans presque tous les cas, je suggère d'utiliser un EnumMap
à la place. Il découple plus complètement les composants, si c'est ce qui vous préoccupe, ou si les enums représentent des indices de colonne ou quelque chose de similaire, vous pouvez facilement apporter des modifications ultérieurement (ou même au moment de l'exécution si nécessaire).
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);
En outre, il est généralement incroyablement efficace.
L'ajout de ce type de données à l'instance de l'énumération elle-même peut être très puissant, mais est le plus souvent utilisé de manière abusive.
Editar: Je viens de réaliser que Bloch a abordé cette question dans Effective Java / 2ème édition, dans Point 33 : Utilisation EnumMap
au lieu de l'indexation ordinale .