Sì, tecnicamente corretto.
Le costanti letterali della enum (i tuoi AVANTI, ecc...) sono riferimenti ad oggetti già istanziati!
Queste costanti sono alla fin fine campi static e final della enum che sono dello stesso tipo della enum e vengono inizializzati in automatico assegnando istanze distinte della enum.
Il compilatore traduce la enum in una cosa che è molto molto simile a:
codice:public final class AzioneEnum extends java.lang.Enum<AzioneEnum> { public static final AzioneEnum AVANTI = new AzioneEnum("AVANTI"); public static final AzioneEnum INDIETRO = new AzioneEnum("INDIETRO"); public static final AzioneEnum FERMO = new AzioneEnum("FERMO"); }
Preciso che il codice sopra è molto fittizio, quello che viene generato a livello di bytecode è, ripeto, molto simile ma non esattamente uguale a questo. C'è dell'altro infatti, ci sono altre cose generate.
Serve solo per far capire che quei AVANTI ecc... sono campi con già un valore, un oggetto della enum.
Quindi la espressione AzioneEnum.AVANTI è il riferimento ad un oggetto già esistente!