![translation](https://cdn.durumis.com/common/trans.png)
Dies ist ein von KI übersetzter Beitrag.
Sprache auswählen
Von durumis AI zusammengefasster Text
- Wenn Sie eine Utility-Klasse mit statischen Methoden und Feldern erstellen, müssen Sie den Konstruktor privat machen, um die Instanziierung zu verhindern.
- Dadurch wird verhindert, dass der Konstruktor von außerhalb der Klasse aufgerufen wird, und Sie können den vom Compiler automatisch generierten öffentlichen Standardkonstruktor explizit steuern.
- Ein privater Konstruktor verhindert die Vererbung, wodurch die beabsichtigte Verwendung der Utility-Klasse eingeschränkt und die Lesbarkeit des Codes verbessert wird.
Manchmal ist es sinnvoll, Klassen zu verwenden, die nur statische Methoden und statische Felder enthalten.
Ein typisches Beispiel dafür sind Utility-Klassen wie java.lang.Math, java.util.Arrays, die Methoden für mathematische Operationen bzw. Arrays zusammenfassen. Oder java.util.Collections, die statische Factory-Methoden für die Erstellung von Objekten, die eine bestimmte Schnittstelle implementieren, zusammenfassen.
Diese Utility-Klassen benötigen keinen Konstruktor, da sie keine Instanzvariablen oder Methoden haben, die benutzt werden könnten. Wenn man aber keinen Konstruktor angibt, erstellt der Compiler automatisch einen öffentlichen Standardkonstruktor. Daher kann der Benutzer nicht erkennen, ob der Konstruktor automatisch generiert wurde.
Um dies zu verhindern, werden Utility-Klassen manchmal als abstrakte Klassen definiert. Allerdings kann man abstrakte Klassen nicht instanziieren, da man einfach eine Unterklasse erstellen und sie instanziieren kann.
public abstract class Person {
public static void speak(String message) {
System.out.println(message);
}
}
public class Student extends Person {
public Student() {
super();
}
Um die Instanziierung einer Utility-Klasse zu verhindern, sollte man den Zugriffsschutz des Konstruktors auf private setzen.
public abstract class Person {
private Person() {
throw new AssertionError();
}
public static void speak(String message) {
System.out.println(message);
}
Wenn der Zugriffsschutz des Standardkonstruktors auf private gesetzt ist, kann man von außerhalb der Klasse nicht darauf zugreifen. Außerdem wurde sichergestellt, dass der Standardkonstruktor nicht innerhalb der Klasse aufgerufen werden kann, da eine Ausnahme ausgelöst wird.
Diese privaten Konstruktoren können aus Anwendersicht schwer zu verstehen sein, daher ist es sinnvoll, sie mit Kommentaren zu versehen. Es ist anzumerken, dass das Blockieren des Konstruktors durch private auch die Vererbung unmöglich macht.
Quelle
- Effektives Java
- https://catsbi.oopy.io/d7f3a636-b613-453b-91c7-655d71fda2b1