2010-08-06 4 views
1

Dans l'exemple de code ci-dessous, j'essaie de tester la valeur d'une énumération dans la classe parente. L'erreur que j'obtiens est "p.theEnum ne peut pas être résolu ou n'est pas un champ.", Mais c'est exactement le même code que j'utilise dans la classe parente pour tester la valeur (sans la p évidemment).Énumération des parents dans Java

Où est-ce que je me trompe? :)

public class theParent { 
    protected static enum theEnum { VAL1, VAL2, VAL3 }; 
    private theEnum enumValue = theEnum.VAL1; 

    theParent() { this.theChild = new theChild(this); this.theChild.start(); } 

    class theChild { 
     private parentReference p; 

     public theChild (theParent parent) { this.p = parent; } 

     public void run() { 
      // How do I access theEnum here? 
      if (p.enumValue == p.theEnum.VAL1) { } 
     } 
    } 
} 

Répondre

4

changer juste à:

if (p.enumValue == theEnum.VAL1) { } 

Il n'y a pas besoin de le qualifier.

(Tout comme un FYI, il serait utile si vous souhaitez faire des échantillons comme cette compilation en dehors de la zone de problème - je devais faire quelques changements de côté de celui ci-dessus avant que je puisse en faire la compilation.

+0

Ah à la vôtre. Le problème que j'ai rencontré là-bas était que theEnum s'appelait en fait State, et qu'il essayait d'utiliser Thread.State, d'où la présence de p.theEnum au lieu de juste l'Enum :) Aussi, désolé pour le manque de compilation. Je connais à peine Java (je suis un gars PHP qui l'apprend) alors j'ai fait de mon mieux dans une zone de texte: P Qu'est-ce qui m'a manqué? – JoeC

+0

@JoeC: Il est préférable de trouver des exemples courts mais complets dans un IDE, afin de pouvoir les vérifier. Dans ce cas, vous appelez 'start' sur' theChild' qui n'est pas valide, et vous avez une variable de type 'parentReference' plutôt que' theParent'. De même, vous n'avez pas déclaré un champ appelé 'theChild' mais vous l'avez assigné dans le constructeur parent. Je pense qu'il y en a eu d'autres aussi - pas sûr. En outre, je suggérerais d'utiliser des noms qui reflètent les conventions de nommage Java, car cela rend les bizarreries plus visibles. –

1

Étant donné que vous utilisez la classe à partir de theParent, vous n'avez pas besoin de la qualifier. Mais, même si vous n'avez pas besoin de vous qualifier, il devrait toujours être possible de se qualifier.

La raison pour laquelle vous obtenez l'erreur est que theEnum est une classe interne statique, mais le qualificatif p.theEnum indique une classe interne non statique qui nécessite la instnace p dans le cadre de l'instanciation. Ici, l'énumération est déclarée statique, donc la manière correcte de la qualifier est theParent.theEnum.

+0

Déjà répondu et voté pour le plus utile (le plus rapide) mais le bit sur la bonne façon de le quantifier a été très utile, merci :) – JoeC