Gli Enum in Java definiscono un tipo di dati che può assumere determinato numero di valori costanti, come ad esempio i semi di una carta da gioco che possono assumere solo 4 possibili valori.
La sintassi è la seguente:
enum <nomeEnum> { <valore1>, ..., <valoreN> }
Esempio
public enum Livello { BASSO, MEDIO, ALTO }
Per variabili di tipo enumerativo la sintassi è:
<TipoEnum> <variabile> = <TipoEnum>.valore;
Esempio:
Livello tmp = Livello.MEDIO;
Gli enum possono essere usate anche dentro le classi.
Esempio:
public class Prova3 { public enum Livello { BASSO, MEDIO, ALTO } public static void main(String[] args) { Livello tmp = Livello.MEDIO; } }
Sono spesso utilizzati insieme al costrutto switch.
Esempio:
enum Level { LOW, MEDIUM, HIGH } public class MyClass { public static void main(String[] args) { Level myVar = Level.MEDIUM; switch(myVar) { case LOW: System.out.println("Low level"); break; case MEDIUM: System.out.println("Medium level"); break; case HIGH: System.out.println("High level"); break; } } Output: Medium Level
E’ possibile prendere tutti i possibili valori di un tipo enum tramite il metodo value (), che restituisce un array di tutte le costanti contenute in quel enum. Questo metodo è utile quando si vogliono scorrere tutte le costanti in esso contenute.
Esempio:
enum Level { LOW, MEDIUM, HIGH } public class MyClass { public static void main(String[] args) { for (Level myVar : Level.values()) { System.out.println(myVar); } } } Output: LOW MEDIUM HIGH
Per prendere il valore, come testo, della costante è sufficiente chiamare il metodo toString().
Esempio
enum Level { LOW, MEDIUM, HIGH } public class MyClass { public static void main(String[] args) { String tmp = Level.HIGH.toString(); } }
Per ottenere una istanza di un enum, per un dato valore String, si puo usare il metodo valueOf ().
Esempio:
enum Level { LOW, MEDIUM, HIGH } public class MyClass { public static void main(String[] args) { Level tmp = Level.valueOf("HIGH"); } }
I valori di tipi enum possono anche essere confrontati tra loro. Per il confronto si può usare == o equals indifferentemente, ma == previene l’eccezione di variabile null.
Esempio:
public class MyClass { enum genere { THRILLER, ROMANTICO, AVVENTUURA }; public void testa(genere g) { if (g == genere.AVVENTUURA) System.out.println("genere avventura"); if (g.equals(genere.ROMANTICO)) System.out.println("genere romantico"); } }
Aggiungere dei campi ad un enum java
È possibile aggiungere campi, e metodi, a un enum java. Quindi, ogni enum ha anche questi campi. I valori dei campi devono essere forniti al costruttore dell’enum quando si definiscono le costanti.
Esempio:
enum Semi2 { CUORI(true,10), SPADE(false, 12), QUADRI(true, 23), FIO-RI(false,28); private boolean red; private int numeroCarte; private Semi2(boolean red, int numeroCarte) { this.red = red; this.numeroCarte = numeroCarte; } public boolean isRed() { return red; } public int getNumeroCarte() { return numeroCarte; } } public class MyClass { public static void main(String[] args) { Semi2 s2 = Semi2.FIORI; System.out.println(s2.isRed()); System.out.println(s2.getNumeroCarte()); } }
Notare che il costruttore dell’enumm che accetta un booleano e un intero. Il costruttore enum imposta il campo int.
Inoltre ogni variabile di tipo Seme2 avrà anche i metodi isRed() e getNumeroCarte(), definiti anch’essi nell’enum.