La propre interprétation efficace de Java. J'ai essayé d'interpréter le point 4 de la 3e édition en écrivant mon propre code.
Pour les classes qui n'ont que des membres statiques, fournissez un constructeur privé qui déclenche une exception d'exécution.
Par exemple, une classe utilitaire qui ne collecte que les processus courants (ci-après dénommée classe Util) ne possède que des méthodes statiques et des variables statiques, et n'est pas fondée sur l'instanciation.
En général, la classe publique Util a un constructeur par défaut public à moins qu'un constructeur ne soit défini, il y a donc un risque qu'il soit instancié inutilement dans une classe externe.
En définissant explicitement un constructeur privé, il est possible d'empêcher les appels de constructeur en dehors de la classe Util. De plus, en insérant un traitement de sortie d'exception dans le constructeur, il est possible de faire d'un appel de constructeur dans la classe Util une erreur.
** Classe Util **
public class SampleUtil {
public static final String HOGE = "hoge";
public static String fugaMethod() {
return "fuga";
}
}
** Classe d'appelant **
public class SampleService {
public String sampleMethod() {
//Inutilement instancié
SampleUtil sampleUtil = new SampleUtil();
return sampleUtil.fugaMethod();
}
}
Je crée une instance dans la classe appelante. Puisque fugaMethod ()
est une méthode statique, il est inutile de l'instancier.
** Classe Util **
public class SampleUtil {
//Définir un constructeur qui est privé et génère une exception d'exécution
private SampleUtil() {
throw new IllegalStateException("Util instance construction is not allowed.");
}
public static final String HOGE = "hoge";
public static String fugaMethod() {
return "fuga";
}
}
** Classe d'appelant **
public class SampleService {
public String sampleMethod() {
return SampleUtil.fugaMethod();
}
}
Puisque le constructeur est privé, il ne peut pas être instancié dans une autre classe en premier lieu.
De plus, même si le constructeur est appelé dans la classe Util, une exception sera générée et aucune instance ne sera créée. Si vous avez du code qui appelle un constructeur, c'est une erreur de programmation, alors assurez-vous de lever une exception d'exécution.
Recommended Posts