public enum Punti {NORD,SUD,EST,OVEST;
NORD() {
public Direction opposta() {
return SUD;
}
},
OVEST() {
public Direction opposta() {
return EST;
}
};
public abstract Direction opposta();
}
class Enum {
enum Direzione {
NORD,SUD,OVEST,EST;
public static Direzione opposta(Direzione dir) {
switch(dir) {
case NORD: return SUD;
case EST: return OVEST;
case SUD: return NORD;
case OVEST: return EST;
}
}
}
public static void main(String[] args) {
Direzione a = Direzione.NORD;
System.out.println(a);
System.out.println(Direzione.SUD.ordinal());
System.out.println(Direzione.EST.hashCode());
System.out.println("La direzione opposta è :"+opposta(a).toString());
}
}
Ti ringrazio, ho risolto. Ora non capisco un'altra cosa negli enum il criterio di equivalenza è stabilito implicitamente in base all'ordinale, quindi con una enum {NORD,SUD,OVEST,EST}, e avendo un Set<Direzione> set = mappa.keyset(), ottengo tutte le chiavi della mappa, che nel mio caso sono le direzioni. Però perchè quando vado a fare un for-each sul set le direzioni non mi vengono stampate in base all'ordinale(NORD,SUD,OVEST,EST), ma in base all'ordine lessicografico(EST,NORD,OVEST,SUD)?Allora prima di tutto hai sbagliato il codice della funzione opposta perche devi porre un return finale oppure un default nello switch, perchè altrimenti il programma pensa che il metodo rischi di non ritornare niente.
Inoltre ti compare "cannot find symbol" perchè il metodo è proprio della enum e non della tua classe dove contieni il main: siccome hai reso il metodo static allora puoi scrivere Direzione.opposta(a)
cosi dovresti risolvere tutto