Riguardo enum in java come ho capito è
Esempio enum
public enum Strategy {
STRATEGY_A {
@Override
void execute(){
System.out.print("Executing strategy A");
}
},
STRATEGY_B {
@Override
void execute(){
System.out.print("Executing strategy B");
}
};
abstract void execute();
}
Questo sarebbe compilato per qualcosa di simile
public abstract class Strategy extends java.lang.Enum<Strategy> {
public static final Strategy STRATEGY_A;
public static final Strategy STRATEGY_B;
private static final Strategy[] $VALUES;
public static Strategy[] values();
public static Strategy valueOf(java.lang.String);
private Strategy();
abstract void execute();
Strategy(java.lang.String, int, Strategy$1);
static {};
}
e l'enum STRATEGY_A sarebbe come una sottoclasse che estende la sua classe base STRATEGY
final class Strategy$1 extends Strategy {
Strategy$1(java.lang.String, int);
void execute();
}
Potrei ottenere quanto sopra con l'aiuto di javap leggendo il file della classe.
Per quanto ho capito, i campi enum (o) le costanti non sono altro che oggetti di classe di enum. Ad esempio
public enum Fruits {
APPLE; //APPLE would be the instance of Fruits
ORANGE; //ORANGE would be the instance of Fruits
GRAPES; //GRAPES would be the instance of Fruits
}
Ma perché enum ha archiviato STRATEGY_A e STRATEGY_B estendere la classe base o l'enum di base STRATEGY ? Non ho potuto distinguere tra "enum fields (APPLE, ORANGE)" e "enum sottoclassi (STRATEGY_A, STRATEGY_B)" come sopra. Cosa significano veramente l'uno dell'altro?
Modifica
Tutti questi dubbi sono venuti mentre si implementa il modello di strategia con enum .