2011-12-04 12 views
30

Stavo leggendo l'interfaccia Map.Entry, quando ho notato che si tratta di un'interfaccia "statica". Non ho capito bene cos'è un'interfaccia statica e in che modo è diversa da un'interfaccia regolare?cos'è un'interfaccia statica in java?

public static interface Map.Entry<K,V>

Questa è la definizione dell'interfaccia. Documenti: http://docs.oracle.com/javase/6/docs/api/java/util/Map.Entry.html

+3

possibile duplicato di http://stackoverflow.com/questions/71625/why-would-a-static-inner-interface-be-used-in-java –

+0

Vedere http://stackoverflow.com/questions/71625/why-would-a-static-inner-interface-be-used-in-java – esaj

+0

Non è appropriato per le interfacce interne? – brainydexter

risposta

30

mi incuriosisce il caso in cui non è un'interfaccia interna.

Il modificatore static è consentito solo su classi o interfacce nidificate. Nell'esempio Entry è nidificato all'interno dell'interfaccia Map.

Per le interfacce, il modificatore static è in realtà opzionale. La distinzione non ha senso per le interfacce poiché non contengono alcun codice che possa accedere allo this esterno.

+0

Grazie per avermelo fatto notare. Non ero a conoscenza del fatto che Entry è un'interfaccia interna e il modificatore statico è consentito solo su classe/interfaccia nidificata. – brainydexter

+11

"La distinzione non ha senso per le interfacce" ... Questo è ciò che confonde così tanti. Non c'è alcuna differenza. Non avrebbero dovuto consentire la parola chiave "statica" per le interfacce. Sono qui? –

+0

Non capisco questa spiegazione. Come ho capito il metodo statico è un metodo che non puoi sovrascrivere, lo stesso per quanto riguarda la classe, se la classe è statica non puoi sovrascriverla, i metodi sono tutti statici, ma l'interfaccia non può essere la causa statica in questo caso non lo farai essere in grado di scavalcare metodi. Quindi non capisco come l'interfaccia possa essere statica? –

4

L'interfaccia interna statica e l'interfaccia interna sono uguali, tutte le regole di accesso sono le stesse della classe statica interna. Quindi l'interfaccia interna può essere accessibile solo se si ha accesso alla sua classe/interfaccia genitore. Nel caso in cui si abbia accesso all'interfaccia B solo dal pacchetto dell'interfaccia A, poiché A ha un modificatore di accesso predefinito. BTW: l'interfaccia B potrebbe essere statica o meno.

interface A { 
    void testA(); 
    public interface B { 
     void testB(); 
    } 
} 
+0

Sono curioso sul caso quando non è un'interfaccia interna. – brainydexter