Peut un constructeur en Java en être privé?
Peut être un constructeur privé? Comment un constructeur privé utile?
- Il convient de noter que la plupart des réponses apportées jusqu'à présent uniquement en considération les cas d'avoir seulement les constructeurs privés. Vous pouvez avoir le public et les constructeurs privés dans la même classe, pour les fins décrites dans Michael Aaron Safyan de réponse.
- Je suis en train de regarder le pot pour
lwjgl3
(bêta) via Eclipse, et j'ai trouvé un constructeur privé dansorg.lwjgl.Version
. Ce qui m'amène ici. Cette classe dispose également de son propremain
, il est intéressant de noter. Java est bizarre. - Ce qui s'est passé lorsque vous avez essayé? Ou regardé? Y avait-il une raison de se méfier de la compilation ou de l'JLS.
Vous devez vous connecter pour publier un commentaire.
Oui, un constructeur ne peut être privé. Il y a différentes utilisations de ce. Une telle utilisation est pour le singleton conception anti-pattern, qui je ne vous le conseille, vous aide. Un autre, plus légitime, est en déléguant les constructeurs; vous pouvez avoir un constructeur qui prend beaucoup de différentes options, c'est vraiment un détail d'implémentation, afin de vous le rendre privé, mais alors votre reste constructeurs de lui déléguer.
Comme un exemple de déléguer les constructeurs, la classe suivante vous permet d'enregistrer une valeur et un type, mais il ne vous permet de le faire pour un sous-ensemble de types, afin de faire le grand constructeur privé est nécessaire pour s'assurer que seuls les types d'observations sont utilisés. La commune constructeur privé permet la réutilisation du code.
Modifier
En regardant cette réponse de plusieurs années plus tard, je tiens à souligner que cette réponse est à la fois incomplet et peut-être un peu extrême. Les Singletons sont en effet un anti-modèle et doit généralement être évitée lorsque cela est possible; cependant, il existe de nombreuses utilisations des les constructeurs privés en plus des singletons, et ma réponse noms d'un seul.
Pour donner un peu plus de cas où les constructeurs privés sont utilisés:
Pour créer un uninstantiable classe qui est juste une collection de fonctions statiques (ce qui est essentiellement un singleton, mais si elle est apatride et les fonctions statiques fonctionnent strictement sur les paramètres plutôt que sur l'état de classe, ce n'est pas comme déraisonnable, une approche que mon ancienne auto, il semble, bien que l'utilisation d'une interface qui est de la dépendance injecté souvent il est plus facile de maintenir l'API lors de la mise en œuvre nécessite un plus grand nombre de dépendances ou d'autres formes de contexte).
Lorsqu'il y a plusieurs différentes façons de créer un objet, un constructeur privé peut être plus facile de comprendre les différents modes de construction (p. ex., qui est plus lisible pour vous
new ArrayList(5)
ouArrayList.createWithCapacity(5)
,ArrayList.createWithContents(5)
,ArrayList.createWithInitialSize(5)
). En d'autres termes, un constructeur privé permet de fournir de l'usine de la fonction dont les noms sont plus compréhensibles, et ensuite faire le constructeur privé s'assure que les gens utilisent seulement le plus évident de tous les noms. C'est aussi couramment utilisé avec le générateur de modèle. Par exemple:Singleton
vous devriez référence claire de vous-même mais n'est-ce pas anti-modèles!This can be done manually or with a dependency injection framework.
Je vous serais reconnaissant si vous pouvez montrer un exemple de code?That is, you construct only one instance and then pass that one instance to all places that use it
de ce que je comprends quethe programmer have to take care of creating only one instance and then passing reference to other classes
Suis-je de droite!Je m'attendais à ce que quelqu'un l'ai mentionné ce (2ème point), mais.. il y a trois utilisations de privé constructeurs:
pour empêcher l'instanciation à l'extérieur de l'objet, dans les cas suivants:
.
pour éviter sublcassing (extension). Si vous faites seulement un constructeur privé, aucune classe ne peut étendre votre classe, car il ne peut pas appeler la
super()
constructeur. C'est en quelques sorte un synonyme pourfinal
constructeurs surchargés comme un résultat de la surcharge des méthodes et des constructeurs, certains peut-être privé et du public. Surtout dans le cas où il y a un non-publique de la classe que vous utilisez dans votre constructeur, vous pouvez créer un constructeur public qui crée une instance de cette classe et passe ensuite à un constructeur privé.
final
mot-clé comme une façon d'atteindre cet objectif.Oui, il peut. Un constructeur privé d'empêcher la classe d'être instancié, ou parce que la construction se passe seulement à l'interne, par exemple un modèle de Fabrique. Voir ici pour plus d'informations.
Oui.
Ceci est fait de sorte que vous pouvez contrôler la façon dont la classe est instanciée. Si vous faites le constructeur privé, et ensuite de créer un visible constructeur méthode qui retourne les instances de la classe, vous pouvez faire des choses comme limiter le nombre de créations (en général, la garantie est exactement une instance) ou de recycler les instances ou d'autres liés à la construction des tâches.
Faire
new x()
ne retourne jamaisnull
, mais en utilisant le modèle de fabrique, vous pouvez retournernull
, ou même un retour de sous-types différents.Vous pouvez aussi l'utiliser pour une classe qui n'a pas de membres de l'instance ou des propriétés, juste statique - comme dans une fonction d'utilité de la classe.
Bien, si tous vos méthodes dans une classe statique, puis un constructeur privé est une bonne idée.
Les Constructeurs privés peuvent être defnied dans le Java pour les raisons suivantes
D'avoir le contrôle sur l'instanciation des objets Java, il l'habitude de vous permettre de créer une instance d'un objet.
Il l'habitude de permettre à la classe d'être sous-classé
Cela a un avantage particulier lors de la mise en œuvre de la le Pattern singleton, Privé contstructors sont utilisés pour elle et d'avoir un contrôle sur la création de l'instance pour l'ensemble de l'application.
quand vous voulez avoir une classe avec toutes les constantes définies et Ne nécessite pas de son exemple, nous déclarons que la classe comme un constructeur privé.
Oui.
Un constructeur privé est utilisé pour prévenir exemple lors de l'initialisation, tels que le calcul final de la classe que vous l'utilisez en java. Singleton également utiliser constructeur privé
Oui. Classe peut avoir des constructeur privé. Même classe abstraite peut avoir de constructeur privé.
En faisant constructeur privé, nous empêcher de la classe instanciée ainsi que des sous-classement de la catégorie.
Voici certaines des utilisations de constructeur privé :
Oui, classe peut avoir un constructeur privé. Il est nécessaire d'interdire l'accès du constructeur à partir d'autres classes et restent accessibles dans la classe définie par.
Pourquoi voudriez-vous les objets de votre classe uniquement être créés à l'interne? Ce qui pourrait être fait pour n'importe quel raison, mais une raison possible est que vous voulez implémenter un singleton. Un singleton est un modèle de conception qui permet à une seule instance de votre classe à être créé, et ce qui peut être accompli à l'aide d'un constructeur privé.
Oui et il est utilisé pour empêcher l'instanciation et par la suite primordial. C'est le plus souvent utilisé dans les classes singleton.
oui un constructeur ne peut être privé. Un Constructeur privé empêche les autres de la classe à partir de l'instanciation d'exemple de constructeur privé
Les constructeurs privés éviter une classe d'être instancié explicitement par les appelants
voir plus d'informations sur PrivateConstructor
Oui, il peut. Je considère cette autre exemple de qu'il soit utile:
Dans le cas ci-dessus, il empêche la classe abstraite d'être instancié par une classe dérivée autre que statique à l'intérieur des classes. Les classes abstraites ne peuvent pas être définitif, mais dans ce cas, le constructeur privé rend effectivement final à toutes les classes qui ne sont pas les classes internes
Idée de base derrière avoir un constructeur privé est de restreindre l'instanciation d'une classe à partir de l'extérieur par la JVM, mais si une classe a un argument du constructeur, puis il en déduit que l'on est intentionnellement l'instanciation.
Selon moi, nous pouvons déclarer constructeur privé et nous aussi, nous
pouvez obtenir l'instance de cette classe dans la sous-classe en utilisant la méthode statique de la classe dans laquelle nous déclarons constructeur et ensuite de retour de classe de l'objet. on classe cette méthode à partir de la sous-classe
en utilisant
classname.method
nom bcz c'est la méthode statique et la nous allons obtenir l'instance de la classe dans laquelle nous déclarer const.