![translation](https://cdn.durumis.com/common/trans.png)
Ceci est un post traduit par IA.
[Effective Java] Item 4 : Utilisez un constructeur privé pour empêcher l'instanciation
- Langue de rédaction : Coréen
- •
-
Pays de référence : Tous les pays
- •
- Technologies de l'information
Choisir la langue
Texte résumé par l'IA durumis
- Lors de la création d'une classe utilitaire qui ne contient que des méthodes et des champs statiques, vous devez créer le constructeur en privé pour empêcher l'instanciation.
- Cela empêche les appels au constructeur en dehors de la classe et vous permet de contrôler explicitement le constructeur par défaut public généré automatiquement par le compilateur.
- Un constructeur privé rend l'héritage impossible, ce qui limite l'utilisation intentionnelle des classes utilitaires et améliore la lisibilité du code.
Il est parfois utile d'utiliser une classe qui ne contient que des méthodes et des champs statiques.
Par exemple, java.lang.Math, java.util.Arrays, etc., sont des classes utilitaires qui regroupent des méthodes liées aux opérations mathématiques ou aux tableaux. Ou encore, java.util.Collections, qui regroupe des méthodes statiques d'usine pour 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, elles peuvent donc être utilisées sans avoir besoin d'un constructeur. Toutefois, si aucun constructeur n'est défini, le compilateur crée automatiquement un constructeur public par défaut. Ainsi, l'utilisateur ne peut pas distinguer un constructeur automatiquement généré.
Pour éviter cela, certaines personnes préfèrent utiliser des classes abstraites. Mais les classes abstraites ne peuvent pas être instanciées. Il suffit de créer une sous-classe et de l'instancier.
public abstract class Person {
public static void speak(String message) {
System.out.println(message);
}
}
public class Student extends Person {
public Student() {
super();
}
Par conséquent, pour empêcher l'instanciation de classes utilitaires, il est nécessaire de rendre le modificateur d'accès du constructeur privé.
public abstract class Person {
private Person() {
throw new AssertionError();
}
public static void speak(String message) {
System.out.println(message);
}
Lorsque le modificateur d'accès du constructeur par défaut est privé, il est inaccessible de l'extérieur de la classe. De plus, il a été bloqué pour empêcher le constructeur par défaut d'être appelé à l'intérieur.
Ce constructeur privé peut être difficile à comprendre pour les utilisateurs. Il est donc conseillé d'ajouter un commentaire. Notez que la restriction du constructeur au niveau privé a également l'effet de rendre impossible l'héritage.