2009-11-04 6 views
6

Comment se fait-il que ce code ne compile pas?Java: comment ça se fait que ça ne compile pas?

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

rapports compilateur:

enum declarations allowed only in static contexts. 

Mais quand je mets l'intérieur de classe A Enum, tout va bien.

Ceci est assez surprenant. Je ne pense pas que j'ai ce problème en C++.

Répondre

10

Vous pouvez corriger ce problème en B statique:

static class B { ... 

Cela reflète de plus près ce que C++ fait avec les classes imbriquées. Par défaut (sans static), les instances de B contiennent une référence cachée à une instance de A.

Une bonne explication des différences peut être trouvée à Java inner class and static nested class.

+7

Une énumération est une bête intrinsèquement statique. Dans l'exemple ci-dessus, vous voulez seulement qu'il y ait un seul objet Enum.AD. Mais si vous avez déclaré une énumération dans une classe non statique, vous auriez (en théorie) besoin d'une instance différente d'Enum.AD pour chaque étendue synamique. Cela n'a pas de sens ... donc c'est interdit. –

Questions connexes