제이온

[Effektives Java] Item 4: Verhindere Instanziierung mit privaten Konstruktoren

  • Verfasst in: Koreanisch
  • Land: Alle Ländercountry-flag
  • IT

Erstellt: 2024-04-28

Erstellt: 2024-04-28 13:38

Manchmal ist es nützlich, Klassen zu verwenden, die nur statische Methoden und statische Felder enthalten.


Beispielsweise kann man Utility-Klassen wie java.lang.Math oder java.util.Arrays verwenden, die mathematische Operationen bzw. Methoden für Arrays enthalten. Oder man kann Utility-Klassen wie java.util.Collections verwenden, die statische Factory-Methoden (statische Fabrikmethoden) zum Erstellen von Objekten enthalten, die ein bestimmtes Interface implementieren.


Diese Utility-Klassen können verwendet werden, ohne dass Instanzvariablen oder -methoden benötigt werden, daher ist kein Konstruktor erforderlich. Wenn jedoch kein Konstruktor angegeben wird, erstellt der Compiler automatisch einen öffentlichen Standardkonstruktor. Daher kann der Benutzer nicht unterscheiden, ob dieser Konstruktor automatisch erstellt wurde.


Um dies zu verhindern, wird die Klasse manchmal als abstrakte Klasse (abstrakte Klasse) deklariert. Allerdings kann man mit abstrakten Klassen Instanziierungen nicht verhindern, da man einfach eine Unterklasse erstellen und diese instanziieren kann.



Um die Instanziierung von Utility-Klassen zu verhindern, muss der Zugriffsspezifizierer des Konstruktors auf private gesetzt werden.



Wenn der Zugriffsspezifizierer des Standardkonstruktors private ist, kann er von außerhalb der Klasse nicht aufgerufen werden. Außerdem wird sichergestellt, dass bei einem internen Aufruf des Standardkonstruktors eine Ausnahme ausgelöst wird.


Diese privaten Konstruktoren können für Benutzer schwer verständlich sein. Daher ist es ratsam, Kommentare hinzuzufügen. Übrigens verhindert das Sperren des Konstruktors mit private auch die Vererbung.


Quelle

Kommentare0