제이온

[Effective Java] Item 4 : Empêcher l'instanciation en utilisant un constructeur privé

Création: 2024-04-28

Création: 2024-04-28 13:38

Il est parfois utile d'utiliser une classe qui contient uniquement des méthodes statiques et des champs statiques.


Par exemple, on peut utiliser des classes utilitaires comme java.lang.Math, java.util.Arrays, qui regroupent des méthodes liées aux opérations mathématiques ou aux tableaux. Ou encore, on peut regrouper des méthodes statiques d'usine (static factory methods) dans une classe comme java.util.Collections, qui permettent de créer des objets implémentant une interface spécifique.


Ces classes utilitaires n'ont pas besoin de variables d'instance ou de méthodes, donc pas besoin de constructeur. Cependant, si aucun constructeur n'est spécifié, le compilateur crée automatiquement un constructeur public par défaut. Ainsi, l'utilisateur ne peut pas distinguer si ce constructeur a été créé automatiquement ou non.


Pour éviter cela, on peut parfois créer une classe abstraite, mais cela ne permet pas d'empêcher l'instanciation. En effet, il suffit de créer une sous-classe et de l'instancier.



Par conséquent, pour empêcher l'instanciation d'une classe utilitaire, il faut rendre le constructeur privé.



Si le constructeur par défaut est privé, il ne sera pas accessible depuis l'extérieur de la classe. De plus, une exception est levée si le constructeur par défaut est appelé à l'intérieur de la classe.


Ce type de constructeur privé peut être difficile à comprendre pour les utilisateurs, il est donc recommandé d'ajouter des commentaires. À noter que rendre le constructeur privé a également pour effet d'empêcher l'héritage.


Source

Commentaires0