Ok, la question n'est peut-être pas très claire. Permettez-moi de donner quelques détails:Comment rendre un constructeur disponible uniquement pour la classe d'usine?
Disons que j'ai une classe de fabrique d'objets Shoe (CShoe) appelée CFactory. CFactory est une classe singleton qui crée et stocke toutes les chaussures instanciées à l'aide d'une hashmap simple. Il est ensuite accédé par des méthodes statiques pour utiliser les objets créés.
Existe-t-il un moyen de forcer le constructeur CShoe de sorte qu'il peut seulement appelé par l'usine? (en d'autres termes, assurez-vous que la création de chaussures ne peut être faite que par la classe singleton factory et non par d'autres classes)
Vous voulez que le produit soit une classe imbriquée de l'usine? –
vous pouvez également faire de CShoe une classe interne (pas une classe statique). en faisant cela, vous empêcherez également d'autres personnes de créer une instance de CShoe sans avoir une instance de CFactory. – Chii
La réflexion est * toujours * capable de contourner les modificateurs de contrôle d'accès avec la méthode setAccessible(), si votre exemple est capable de s'exécuter. Vous pouvez arrêter ceci en lançant un SecurityManager qui interdit l'autorisation "suppressAccessChecks", voir http://java.sun.com/docs/books/tutorial/essential/environment/security.html –