apr 17

Java, anonymous classes (classi anonime)

Stampa questo articolo

Un’anonymous class (classe anonima) è una inner class che viene contemporaneamente definita e istanziata e non ha un nome.
Un’anonymous class (classe anonima) esiste se e soltanto se esiste una super classe da estendere o un’interfaccia da implementare!
Quando estende una classe, la sintassi dichiarativa assume la seguente forma:
new <nome superclasse> (<lista opzionale di argomenti>) {…}
Quando invece implementa un’interfaccia, assume la seguente forma:
new <nome interfaccia> () {…}
Bisogna osservare che sebbene una classe anonima estenda una classe o implementi un’interfaccia, essa non usa né la clausola extends né la clausola implements.
Inoltre, come per le local classes, anche le anomymous classes non possono usare la parola chiave static in fase di dichiarazione.
[to be continued...]

Tagged with:
feb 02

Java 1.6, nested type e inner classes

Stampa questo articolo

Che confusione!
Sui tipi annidati (nested type) e la classi interne (inner classes) in giro per la rete ci sono scritte un sacco di fregnacce! Probabilmente perché la SUN, a partire dalla versione 1.4 di java, ha fatto un po’ di casini con la nomenclatura, modificando il significato di alcuni termini. Comunque sia, ora proviamo a fare chiarezza.
Per prima cosa mettiamo in chiaro un concetto: le definizioni in informatica si danno e si usano in inglese. Ci si può riferire al corrispondente termine italiano per meglio comprendere di cosa si parla, ma è l’inglese che rende univoco un concetto o una definizione.
Torniamo quindi all’Università e alle definizioni :-)

Definizione:
Con il termine nested type (tipi annidati) si intende indicare:

  • nested classes
  • nested enums
  • nested interfaces

Definizione:
Con il termine nested class (classe annidata) si intende una classe dichiarata all’interno di un’altra classe.
Allo stesso modo si definisono le nested enum e le nested interface.
Ci sono 4 tipi di nested classes:

  1. static member classes, enums e interfaces
  2. non-static member classes
  3. local classes
  4. anonymous classes

Definizione:
Con il termine inner class (classe interna) si indica una qualsiasi nested class purché NON di tipo 1 (vedi definizione precedente).

Facciamo un esempio commentato a dovere:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Alessandro {              // (1) Top level class
    static class SMC {/*...*/}  // (2) Static member class
    interface SMI {/*...*/}     // (3) Static member interface
    class NSMC {/*...*/}        // (4) Non-static member (inner) class
    void nsm() {
        class NSLC {/*...*/}    // (5) Local (inner) class in non-static context
    }
    static void sm() {
        class SLC {/*...*/}     // (6) Local (inner) class in static context
    }
    SMC nsf = new SMC() {       // (7) Anonymous (inner) class in non-static context
        /*...*/
    };
    static SMI sf = new SMI() { // (8) Anonymous (inner) class in static context
        /*...*/
    };
    enum SME {/*...*/}          // (9) Static member enum
}
Tagged with:
nascondi colonna destranascondi colonna destra
preload preload preload

Optimized by SEO Ultimate