Visualizzazione dei risultati da 1 a 7 su 7

Discussione: enumerazioni

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    315
    Quindi il codice corretto è questo:

    codice:
    public enum AzioneEnum
    {
          AVANTI, INDIETRO, FERMO;
    }
    
    public class Classe
    {
    ...
    
         public void esegui(AzioneEnum azione)
         {
                 switch(azione)
                 {
                         case AVANTI:
                                       vaiAvanti();
                         break;
    
                         case INDIETRO:
                                       vaiIndietro();
                         break;
     
                         case FERMO:
                                       fermati();
                         break;    
                 }
         }
    
    ...
    }
    Io però non capisco una cosa. Come posso utilizzare le costanti AVANTI, INDIETRO e FERMO presenti nella enumerazione se non le ho neanche inizializzate?
    Mi riferisco ovviamente all'esempio di sopra ma anche a questa istruzione:
    System.out.println(AzioneEnum.AVANTI);
    che secondo il manuale restituisce questo output:
    AVANTI
    E' vero che nella enumerazione, se non sbaglio, non posso avere un'istruzione di inizializzazione di una costante ma allora come faccio ad avere quell'output?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da newutente Visualizza il messaggio
    Quindi il codice corretto è questo:
    Sì, tecnicamente corretto.

    Quote Originariamente inviata da newutente Visualizza il messaggio
    Come posso utilizzare le costanti AVANTI, INDIETRO e FERMO presenti nella enumerazione se non le ho neanche inizializzate?
    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!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.