2009-11-04 17 views
6

Come mai questo codice non viene compilato?Java: come mai questo non viene compilato?

class A 
{ 
    class B 
    { 
    public enum Enum <-- this line 
    { 
     AD, 
     BC 
    } 
    } 
} 

compilatore segnala:

enum declarations allowed only in static contexts. 

Ma poi quando ho messo la classe all'interno Enum A, va tutto bene.

Questo è abbastanza sorprendente. Non penso di avere questo problema in C++.

risposta

10

È possibile risolvere questo problema facendo B statica:

static class B { ... 

Questo rispecchia più da vicino ciò che C++ fa con le classi nidificate. Per impostazione predefinita (senza static), le istanze di B contengono un riferimento nascosto a un'istanza di A.

Una buona spiegazione delle differenze può essere trovata a Java inner class and static nested class.

+7

Un enum è una bestia intrinsecamente statica. Nell'esempio sopra, vuoi sempre che ci sia un oggetto Enum.AD. Ma se hai dichiarato un enum all'interno di una classe non statica, avresti (in teoria) bisogno di un'istanza diversa di Enum.AD per ogni ambito di sincronizzazione. Non ha senso ... quindi è proibito. –

Problemi correlati