Il più Un motivo valido comune per volere una costante intera associata a ciascun valore enum è di interoperare con qualche altro componente che si aspetta ancora quegli interi (ad esempio un protocollo di serializzazione che non può essere modificato, o le enumerazioni rappresentano colonne in una tabella, ecc.).
In quasi tutti i casi, suggerisco di utilizzare un EnumMap
invece. Disaccoppia i componenti in modo più completo, se questo è il problema, o se le enumerazioni rappresentano indici di colonne o qualcosa di simile, puoi facilmente apportare modifiche in seguito (o anche in fase di esecuzione se necessario).
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);
In genere è anche incredibilmente efficiente.
L'aggiunta di dati come questo all'istanza di enum può essere molto potente, ma è più frequente che non abusata.
Edit: appena realizzato Bloch ha affrontato questo in Effective Java/2 ° edizione, in Articolo 33: Uso EnumMap
invece di indicizzazione ordinali.
fonte
2010-10-21 18:16:13
Non sarà la compilazione; hai definito "SIGN_CREATE" due volte. Inoltre, quelle non sono costanti - non sono "definitive". – BlairHippo