
Originariamente inviata da
matteom96
sto usando jdbc con la classe connection..come è possibile la string dall'enum java?
comunque nel programma mi serve scrivere la fascia oraria come stringa,e non come orario... come posso rapportarla senza toppare?
Questo è quello che si potrebbe fare:
codice:
public enum FasciaOraria {
FASCIA_0830_0930("8:30-9:30"),
FASCIA_0930_1030("9:30-10:30");
private final String codiceFascia;
FasciaOraria(String codiceFascia) {
this.codiceFascia = codiceFascia;
}
public String toString() {
return codiceFascia;
}
}
Lo spiego un attimo perché magari per te è "arabo". 
I nomi delle costanti li ho messi tipo appunto FASCIA_0830_0930. Questi nomi sono tecnicamente quelli che il linguaggio Java chiama "identificatori" e devono seguire delle regole, tra cui: niente spazi, niente caratteri particolari (a parte underscore '_' e il dollaro '$' che sono leciti), NON possono iniziare con una cifra numerica.
Gli oggetti della enum assegnati alle costanti, POSSONO avere dello "stato", è quel campo privato codiceFascia. Di norma è bene che lo stato di una enum sia "immutabile", questo è il motivo del "final" (e non c'è ovviamente alcun metodo setter).
Il FasciaOraria(String codiceFascia) è un costruttore che è implicitamente private, Sì, le enum POSSONO avere dei costruttori interni ma sono appunto privati e non possono essere invocati esplicitamente, se non per quella forma particolare FASCIA_0830_0930("8:30-9:30") .
E una enum può ridefinire toString(), in generale (come nell'esempio) oppure "per costante".
Con la enum sopra, se scrivi da qualche parte:
System.out.println(FasciaOraria.FASCIA_0830_0930);
Ti stampa il codiceFascia, ovvero 8:30-9:30 perché viene invocato implicitamente il toString() passando l'oggetto della enum al println.
Il vantaggio grosso delle enum è che puoi farci uno switch oppure testare l'uguaglianza con == (per riferimento). Perché gli oggetti della enum sono SOLO quelli associati alle costanti e non ce ne possono essere altri.
Quindi se hai una variabile del tipo:
codice:
FasciaOraria fasciaScelta = ..........
Puoi fare es.
codice:
if (fasciaScelta == FasciaOraria.FASCIA_0930_1030) {
// .....
}
Una ultima questione: come passare da una stringa es. "8:30-9:30" ad avere il riferimento a FasciaOraria.FASCIA_0830_0930
Questo purtroppo è da fare "a mano" con un pochino di codice.
Tutte le enum hanno implicitamente un valueOf(String) che però si basa solo sul name() della enum che è il nome esatto così come è scritto nel sorgente.
FasciaOraria fo = FasciaOraria.valueOf("FASCIA_0830_0930");
Allora in questo caso ottieni il riferimento all'oggetto referenziato da FasciaOraria.FASCIA_0830_0930.
NON puoi passare a valueOf il nostro codiceFascia, perché è uno "stato" che abbiamo aggiunto noi e il framework non ne sa nulla.
Dovresti mettere in FasciaOraria un metodo statico del tipo:
public static FasciaOraria trovaPerCodice(String codice)
Che sfrutta o una ricerca lineare oppure (più furbamente) una mappa prepopolata che associa i codici agli oggetti.
P.S. capisco che ho scritto un po' di roba .... se non è chiaro, chiedi!