Classi anonime: piccola richiesta

di il
1 risposte

Classi anonime: piccola richiesta

Ciao a tutti ho questo pezzo di codice:

class ClsSpedizioni {
public Destinazione destinazione(final String paeseDest, final int qtyDest) {
return new Destinazione() {
private String paese = paeseDest;
private int qty;
{
qty = qtyDest;
if (qty > 1000)
System.out.println("Ecceduti limiti di carico");
}
public String getDestinazione() { return paese; }
};
}
}

La mia domanda è: cosa servono le { }. Ho visto che togliendole il compilatore mi segnala errore (illegal start of type). Ma non ho capito perché.

Grazie...

1 Risposte

  • Re: Classi anonime: piccola richiesta

    Rappresentano l'inizio e la fine del corpo di una classe appunto anonima. In pratica tu stai definendo una classe che
    estende un interfaccia Destinazione che potrebbe anche essere vuota. Solo che i metodi e le proprietà di questa classe
    sono interne (annidate) in una un altra classe. Per poter ottenere un istanza della classe anonima avrai sempre bisogno
    della classe che la contiene.
    Credo però che tu abbia omesso di riportare il frammento di codice che definisce l'interfaccia Destinazione.
    Attenzione i metodi come getDestinazione() devono essere dichiarati nell'interfaccia altrimenti non potrai richiamarli.
    
    
    interface Destinazione
    {
        public String getDestinazione();
    }
    class ClsSpedizioni {
    
        public Destinazione destinazione(final String paeseDest, final int qtyDest)
        {
            return  new Destinazione() {
    
                private String paese = paeseDest;
                private int qty;
    
                {
                    qty = qtyDest;
                    if (qty > 1000) {
                        System.out.println("Ecceduti limiti di carico");
                    }
                }
    
                public String getDestinazione() {
                    return paese;
                }
            };
        }
    }
    
           // Esempio di utilizzo 
            ClsSpedizioni csp = new ClsSpedizioni(); 
            Destinazione oDest = csp.destinazione("Italia", 100); 
            String dest = oDest.getDestinazione(); 
    
    
Devi accedere o registrarti per scrivere nel forum
1 risposte