J'ai une classe B de Java avec une classe interne C. Certaines méthodes de B acceptent une instance de C comme paramètre mais je veux seulement accepter les instances C créées par l'instance appropriée de B. Y at-il un moyen de faire cette validation à la compilation?Validation des instances de classes internes
Exemple
C c1 = new C();
B foo = c1.getB(); // foo was created by instance c1
C c2 = new C();
c2.method(foo); // I want a compiler error here.
Mon cas
ont souvent des noms de classe Carte qui détiennent une matrice d'instances de la MapArea de classe interne. La bonne chose à propos de ce schéma est que je peux valider les champs xPos et yPos du constructeur afin de ne pas créer de zones non valides pour une carte donnée. La carte en tant que méthode distanceFrom (MapArea startingPos, MapArea toLocation, MapArea ... otherLocations) et j'essayais d'éviter de valider à nouveau les arguments de la zone de carte.
C c1 = new C(); B foo = c1.getB() C c2 = nouveau C(); c2.method (toto) // Je veux une erreur de compilation ici. –
Donc vous parlez d'avoir plusieurs objets externes (B) qui peuvent chacun créer plusieurs objets internes (C), mais certaines méthodes d'objet C doivent seulement accepter le B à partir duquel ils ont été créés? Je ne vois pas comment vous allez faire ça au moment de la compilation. Vous parlez plus de la hiérarchie d'exécution. La seule façon dont je peux voir que vous pouvez le faire est de marquer chaque C avec son parent (le B qui l'a créé) et de le valider d'une manière ou d'une autre à l'exécution avec un assert. Le compilateur ne peut probablement pas vous aider. – Andrew
En regardant plus à votre exemple: réponse courte, non. Le compilateur ne peut pas valider comme vous le souhaitez. – Andrew