In questo esempio, GiorniDellaSettimana è una enum che rappresenta i sette giorni della settimana. Ogni giorno è definito come una costante all’interno della enum.
Puoi utilizzare le enum come qualsiasi altro tipo di dato in Java. Ad esempio, puoi dichiarare una variabile di tipo GiorniDellaSettimana e assegnarle un valore:
GiorniDellaSettimana oggi = GiorniDellaSettimana.LUNEDI;
Puoi anche confrontare i valori delle enum utilizzando gli operatori di confronto, come ==:
if (oggi == GiorniDellaSettimana.LUNEDI) { System.out.println("Oggi è lunedì!");}
Campi: che sono variabili di istanza che memorizzano informazioni relative a ogni costante dell’enum.
Metodi: che vengono utilizzati per fornire funzionalità alle costanti dell’enum.
Costruttori: che vengono utilizzati per inizializzare i campi di ogni costante dell’enum.
Costruttori Privati
È importante notare che i costruttori di un enum devono essere private, il che significa che non possono essere chiamati da fuori dell’enum. Ciò garantisce che le costanti dell’enum siano create solo una volta e che non possano essere modificate dopo la creazione.
Quando si definiscono metodi polimorfici all’interno di un enum, ogni costante dell’enum può avere una propria implementazione del metodo, il che consente di definire comportamenti diversi per ogni costante.
Esempio
public enum Animali { CANE { @Override public String suono() { return "Woof!"; } }, GATTO { @Override public String suono() { return "Miao!"; } }, TOPO { @Override public String suono() { return "Squeak!"; } }; public abstract String suono();}
Interfacce ed Enum
Interfacce
In Java, un’interfaccia è un tipo di astrazione che definisce un insieme di metodi che devono essere implementati dalle classi che implementano l’interfaccia.
Le enum postare interfacce, il che significa che devono fornire implementazioni per tutti i metodi definiti nell’interfaccia.
Per implementare un’interfaccia in un enum, si utilizza la parola chiave implements dopo la dichiarazione dell’enum, seguito dal nome dell’interfaccia. Successivamente, si forniscono le implementazioni dei metodi definiti nell’interfaccia all’interno della enum.
Esempio
public interface Suonabile { String suono();}public enum Animali implements Suonabile { CANE("Woof!"), GATTO("Meow"), private final String verso; @Override public String suono() { return verso; }}
In questo esempio, abbiamo definito un’interfaccia Suonabile che definisce un metodo suona() che restituisce una stringa che rappresenta il suono che fa un animale. La enum Animali implementa l’interfaccia Suonabile, il che significa che deve fornire un’implementazione del metodo suona().
Metodi Predefiniti
enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE}
Metodi Statici:
values(): restituisce l’array delle costanti enumerative
valuesOf(String s): restituisce l’oggetto associato al nume della costante dato
Metodi non Statici:
ordina(): restituisce la posizione della costante data
toSting(): restituisce il nome come stringa (può essere effettuato override)
name(): restituisce il nome come stringa, ma è final (no override)
ordinal(): Restituisce la posizione di una costante enum. Ad esempio, SMALL.ordinal() restituisce 0.
compareTo(): Confronta le costanti enum in base al loro valore ordinale. Ad esempio, Size.SMALL.compareTo(Size.MEDIUM) restituisce ordinal(SMALL) - ordinal(MEDIUM).
toString(): Restituisce la rappresentazione stringa delle costanti enum. Ad esempio, SMALL.toString() restituisce "SMALL".
name(): Restituisce il nome definito di una costante enum in forma di stringa. Il valore restituito dal metodo name() è finale. Ad esempio, name(SMALL) restituisce "SMALL".
valueOf(): Prende una stringa e restituisce una costante enum che ha lo stesso nome della stringa. Ad esempio, Size.valueOf("SMALL") restituisce la costante SMALL.
values(): Restituisce un array di tipo enum che contiene tutte le costanti enum. Ad esempio, Size[] enumArray = Size.values().
Possibili Errori
Non sono sicuro che questi esempi siano giusti al 100%, ma per ora non sono riuscito a trovare niente di meglio.