Enum e metodi degli Enum
Fa parte della sezione Programmazione orientata agli oggetti del percorso Java di Coddy. Lezione 50 di 87.
Un enum (enumerazione) è un tipo speciale di classe che rappresenta un insieme fisso di costanti. Invece di usare numeri interi o stringhe arbitrari per rappresentare opzioni come i giorni della settimana o gli stati degli ordini, gli enum forniscono valori leggibili e sicuri rispetto al tipo.
enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
Day today = Day.MONDAY;
System.out.println(today); // Stampa: MONDAYGli enum sono più che semplici costanti: sono classi complete. Puoi aggiungere campi, costruttori e metodi:
enum Size {
SMALL(10), MEDIUM(20), LARGE(30);
private int price;
Size(int price) {
this.price = price;
}
public int getPrice() {
return price;
}
}
System.out.println(Size.MEDIUM.getPrice()); // Stampa: 20Ogni enum include metodi integrati utili. Il metodo values() restituisce un array di tutte le costanti, mentre valueOf() converte una stringa nella costante enum corrispondente. Il metodo ordinal() restituisce la posizione della costante (a partire da 0):
for (Day d : Day.values()) {
System.out.println(d + " is at position " + d.ordinal());
}
Day day = Day.valueOf("FRIDAY"); // Converte la stringa in un enumGli enum sono ideali quando hai un insieme noto e fisso di valori che non cambierà durante l'esecuzione, rendendo il tuo codice più sicuro ed espressivo rispetto all'uso di semplici costanti.
Sfida
FacileCostruiamo un sistema di ordinazione per una caffetteria che mostri la potenza degli enum con campi, costruttori e metodi. Creerai un enum CoffeeSize che memorizza le informazioni sui prezzi e un sistema per elaborare gli ordini dei clienti.
Organizzerai il codice in tre file:
CoffeeSize.java: crea un enum che rappresenta le dimensioni del caffè con i relativi prezzi. Il tuo enum deve avere tre costanti:SMALL,MEDIUMeLARGE, con prezzi rispettivamente di2.50,3.50e4.50.Ogni dimensione ha bisogno di un campo
priceprivato (double), di un costruttore per assegnargli un valore e di un metodogetPrice()per recuperarlo. Aggiungi anche un metodogetDescription()che restituisca una stringa nel formato:[size name] - $[price](per esempio:SMALL - $2.5)Order.java: crea una classe che rappresenta un ordine di caffè. Un Order ha due campi privati:customerName(String) esize(CoffeeSize). Includi un costruttore per inizializzare entrambi i campi e metodi getter per ciascuno.Aggiungi un metodo
getReceipt()che restituisca una stringa su più righe:Order for: [customerName] Size: [size description from getDescription()] Total: $[price from the size]Main.java: dai vita alla tua caffetteria! Riceverai due input: il nome di un cliente (String) e il nome di una dimensione (String, ad esempio "SMALL", "MEDIUM" o "LARGE").Per prima cosa, usa
CoffeeSize.valueOf()per convertire la stringa della dimensione nella costante enum corrispondente. Crea un Order con il nome del cliente e la dimensione, poi stampa la ricevuta.Dopo aver stampato la ricevuta, stampa una riga vuota, quindi mostra il menu completo iterando su tutti i valori di
CoffeeSizeusando il metodovalues(). Per ogni dimensione, stampa la relativa descrizione su una riga separata.
Riceverai due input nell'ordine seguente: il nome del cliente e il nome della dimensione (uno tra "SMALL", "MEDIUM" o "LARGE").
Nota come l'enum racchiuda sia l'identità della dimensione sia il relativo prezzo, in modo molto più ordinato rispetto all'uso di costanti separate o numeri magici sparsi nel codice!
Provalo tu
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Leggi gli input
String customerName = scanner.nextLine();
String sizeName = scanner.nextLine();
// TODO: Converti sizeName nell'enum CoffeeSize usando valueOf()
// TODO: Crea un Order con il nome del cliente e la dimensione
// TODO: Stampa la ricevuta
// TODO: Stampa una riga vuota
// TODO: Mostra il menu completo scorrendo tutti i valori di CoffeeSize
// Suggerimento: usa CoffeeSize.values() per ottenere tutte le costanti dell'enum
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti della programmazione a oggetti
File esterniIntroduzione alla programmazione a oggettiClassi e oggettiLa parola chiave thisMetodiCampi (attributi)Metodo costruttoreSovraccarico dei costruttoriRipasso - Calcolatrice semplice4Ereditarietà
Ereditarietà di base (extends)La parola chiave superSovrascrittura dei metodi (@Override)Concatenamento dei costruttoriLa classe ObjectEreditarietà singola e multilivelloPerché non esiste l'ereditarietà multipla delle classiRiepilogo: gerarchia dei dipendenti7Metodi speciali e classe Object
Metodo toString()equals() e hashCode()Metodo clone()compareTo() e ComparableInterfaccia ComparatorRiepilogo - Ordinamento personalizzato2Modificatori di accesso e incapsulamento
Panoramica dei livelli di accessoMetodi getter e setterNascondimento delle informazioniLa parola chiave finalRiepilogo - Gestore di conti bancari5Polimorfismo
Nozioni di base sull'overloading dei metodiOverride dei metodi (a runtime)Upcasting e downcastingL'operatore instanceofClassi e metodi astrattiRiepilogo - Calcolatore di forme8Concetti avanzati di OOP
Composizione vs ereditarietàAggregazione vs composizioneClassi interne, annidate e anonimeEnum e metodi degli EnumRecord (Java 16+)Classi sealed (Java 17+)11Modelli di progettazione Parte 1
Introduzione ai modelli di progettazionePattern SingletonPattern FactoryPattern BuilderPattern ObserverPattern Strategy3Proprietà di classe e membri statici
Variabili di istanza e staticheMetodi staticiBlocchi staticiCostanti (static final)Riepilogo - Contatore e utility6Interfacce e classi astratte
Introduzione alle interfacceImplementazione delle interfacceImplementazione di più interfacceMetodi default e static nelle interfacceClassi astratte e interfacce a confrontoInterfacce funzionaliRiepilogo: sistema di pagamento9Tipi generici
Introduzione ai tipi genericiClassi genericheMetodi genericiParametri di tipo con limitiCaratteri jolly (?, extends, super)Riepilogo - Contenitore generico12Modelli di progettazione – Parte 2
Pattern CommandPattern AdapterPattern DecoratorPattern Template MethodPattern StatePattern CompositePattern IteratorEsercitati da solo: Compilatore Java online