2014-09-14 15 views
13

Non riesco a capire perché questo sia anche compilato. Ho provato con diversi formati e sembrano funzionare tutti ..Perché è permesso "enum of enum of enum..`?

perché è legale avere uno enum of enum of enum of..?

interface I { 

    enum E implements I { 
     VAL; 
    } 

    class Test { 
     I.E   f1 = I.E.VAL; 
     I.E.E  f2 = I.E.VAL; 
     I.E.E.E  f3 = I.E.VAL; 
     I.E.E.E.E.E f4 = I.E.VAL; 

     I.E v1 = I.E.VAL; 
     I.E v2 = I.E.E.VAL; 
     I.E v3 = I.E.E.E.E.E.E.VAL; 
     I.E v4 = I.E.E.E.E.E.E.E.E.E.E.VAL; 
    } 
} 

mio IDE segnala si compila bene, anche se I.E.E non ha senso per me.

risposta

11

L'interfaccia I contiene un tipo di enum denominato E.

Questo tipo implementa la stessa interfaccia I, quindi eredita tutto ciò che quell'interfaccia contiene.
Ciò include il tipo E stesso.

In altre parole, I.E.E accede a I.E come ereditato da E dall'esterno I.

+0

Java * potrebbe * rendere più semplici le regole di ereditarietà per le interfacce. Approfittare di questa regola raramente ha senso (anche senza la ricorsione infinita qui dimostrata). –

+0

@MarkoTopolnik: puoi farlo anche con le lezioni. – SLaks

+1

non vi è alcuna ricorsione infinita in corso qui. – specializt