Effektive Java-eigene Interpretation. Ich habe versucht, Punkt 4 der 3. Ausgabe zu interpretieren, indem ich meinen eigenen Code geschrieben habe.
Geben Sie für Klassen mit nur statischen Mitgliedern einen privaten Konstruktor an, der eine Laufzeitausnahme auslöst.
Beispielsweise verfügt eine Utility-Klasse, die nur allgemeine Prozesse sammelt (im Folgenden: Util-Klasse), nur über statische Methoden und statische Variablen und basiert nicht auf der Instanziierung.
Im Allgemeinen verfügt die öffentliche Util-Klasse über einen öffentlichen Standardkonstruktor, sofern kein Konstruktor definiert ist. Daher besteht die Sorge, dass er in einer externen Klasse unnötig instanziiert wird.
Durch die explizite Definition eines privaten Konstruktors können Konstruktoraufrufe außerhalb der Util-Klasse verhindert werden. Durch Einfügen der Verarbeitung von Ausnahmeausgaben in den Konstruktor ist es auch möglich, einen Konstruktoraufruf in der Util-Klasse zu einem Fehler zu machen.
** Util Klasse **
public class SampleUtil {
public static final String HOGE = "hoge";
public static String fugaMethod() {
return "fuga";
}
}
** Anruferklasse **
public class SampleService {
public String sampleMethod() {
//Nutzlos instanziiert
SampleUtil sampleUtil = new SampleUtil();
return sampleUtil.fugaMethod();
}
}
Ich erstelle eine Instanz in der aufrufenden Klasse. Da fugaMethod ()
eine statische Methode ist, ist es sinnlos, sie zu instanziieren.
** Util Klasse **
public class SampleUtil {
//Definieren Sie einen Konstruktor, der privat ist und eine Laufzeitausnahme ausgibt
private SampleUtil() {
throw new IllegalStateException("Util instance construction is not allowed.");
}
public static final String HOGE = "hoge";
public static String fugaMethod() {
return "fuga";
}
}
** Anruferklasse **
public class SampleService {
public String sampleMethod() {
return SampleUtil.fugaMethod();
}
}
Da der Konstruktor privat ist, kann er überhaupt nicht in einer anderen Klasse instanziiert werden.
Auch wenn der Konstruktor in der Util-Klasse aufgerufen wird, wird eine Ausnahme ausgegeben und keine Instanz erstellt. Wenn Sie Code haben, der einen Konstruktor aufruft, handelt es sich um einen Programmierfehler. Stellen Sie daher sicher, dass Sie eine Laufzeitausnahme auslösen.
Recommended Posts