2012-02-01 19 views
6

Il compilatore java consente di scrivere una definizione di classe all'interno di un'interfaccia. Ci sono usi specifici di questo?Classe nidificata all'interno di un'interfaccia

interface ClassInterface { 

    void returnSomething(); 
    int x = 10; 

    class SomeClass { 
    private int y; 

    private void classDoingSomething() {   
    } 
    } 
} 

Spiegare per favore.

+1

possibile duplicato: http://stackoverflow.com/questions/594789/proptical-side-of-the-ability-to-define-a-class-within-an-interface-in-java –

+1

possibile duplicato di [ inner class within Interface] (http://stackoverflow.com/questions/2400828/inner-class-within-interface) – aioobe

risposta

2

Si potrebbe usare per legare strettamente un certo tipo a un'interfaccia. Leggi la pagina This per ulteriori informazioni e un esempio di definizione di una classe all'interno di un'interfaccia.

+0

Infatti .. Qui lo sto usando per incorporare l'implementazione [Null object] (https://en.wikipedia.org/wiki/Null_Object_pattern) di un'interfaccia, quindi non ho bisogno di creare un file di classe per questo. – Campa

4

Gli usi sono gli stessi di una classe nidificata in un'altra classe: consente di esplorare la classe per l'interfaccia. Si potrebbe immaginare qualcosa di simile:

public interface Switch { 

    public enum Status { 
     ON, OFF; 
    } 

    void doSwitch(); 
    Status getStatus(); 
} 

Si evita di definire una classe di primo livello di nome SwitchStatus (perché Status potrebbe essere un nome troppo generico).

0

dichiarare una classe annidata all'interno di un'interfaccia sarebbe estremamente pessima programmazione. Un'interfaccia è un'astrazione di un concetto, non un'implementazione di uno. Pertanto, dettagli di implementazione dovrebbero essere lasciati fuori interfacce

http://onjava.com/onjava/excerpt/HardcoreJava_chap06/index2.html

+0

_ "Ricorda, solo perché puoi tagliare la mano con una sega non significa che sia particolarmente buona idea "_ LOL ... Ad ogni modo, credo che questo sia vero come regola generale, ma casi speciali possono essere applicati senza essere" estremamente pessimi ". – Campa

+1

Non sono sicuro che sia d'accordo con questo: l'uso di classi nidificate con l'implementazione all'interno di un'interfaccia non vincola le implementazioni dell'interfaccia per utilizzare quel codice. Le implementazioni sono libere di ignorare il codice di implementazione nidificato e fornire la propria implementazione dell'interfaccia. Se usate con saggezza, le classi nidificate possono consentire una migliore incapsulamento/organizzazione del codice. –

Problemi correlati