2010-11-28 2 views
64

Une instance englobante qui contient est nécessaireUne instance englobante qui contient <ma référence> est nécessaire

est le code ci-dessous. positionObj est l'objet que j'essaie d'utiliser et il me donne l'erreur ci-dessus.

On ne sait pas pourquoi.

package toolBox; 
import toolBox.Secretary.positionObj;  

public class PositionManagement { 
    public static HashMap<String, Secretary.positionObj> main(String vArg){ 
     positionObj newPosition=new positionObj(); 
    } 
} 

Répondre

96

Vous essayez d'utiliser la classe positionObj interne non statique sans une instance de Secretary pour qu'il appartienne à.
Une classe interne non statique doit appartenir à une instance de sa classe parent

Vous devez probablement remplacer positionObj par une classe normale ou une classe interne statique. Vous pouvez également écrire someSecretary.new positionObj() pour créer une instance de la classe interne appartenant à l'instance someSecretary.

+0

convenu, mais cette déclaration générale est un peu floue. pourriez-vous donner un exemple ou me signaler quelque part qui pourrait mieux expliquer cela? merci –

+1

@jason: C'est parti. – SLaks

+0

oui. J'ai réalisé en essayant de déboguer cela si j'ai rendu ma positionObj à statique que cela a fonctionné (dans sa classe de secrétaire). Je suis heureux et tout cela fonctionne maintenant, mais merci pour le pointeur. Se penchera sur la cause réelle de cette erreur. –

0

La signature générique correcte serait

public static HashMap<String, positionObj> main(String vArg) 

vous ne avez pas besoin de se qualifier positionObj puisque vous importez déjà. Cependant, je suis certain qu'une méthode principale doit être conforme à la signature ci-dessous. Si vous avez l'intention d'avoir la principale méthode principale pour votre programme, changer la signature à

public static void main(String[] args) {...} 

vous pouvez créer une méthode statique séparée qui retourne une carte et de l'invoquer principale. Comme une note, toutes les classes devraient commencer par une lettre majuscule, positionObj, devrait être PositionObj.

+0

hey, certains ont quitté le code. convenu de l'affaire. la classe retourne quelque chose, mais l'erreur est là et je ne comprends pas pourquoi. –

+0

@ jason, j'ai mis à jour ma réponse – hvgotcodes

+0

@ jason, je ne pense pas que vous pouvez retourner quelque chose de principal. – hvgotcodes

1

Créez d'abord un objet de classe externe. Dans ce cas je pense "Secrétaire". Ensuite, créez la positionObj. Comme cela,

Secretary x = new Secretary(); 
Secretary.positionObj y = x.new positionObj(); 
Questions connexes