제이온

[Efektywny Java] Element 4. Unikaj tworzenia instancji, używając prywatnego konstruktora

  • Język oryginalny: Koreański
  • Kraj: Wszystkie krajecountry-flag
  • TO

Utworzono: 2024-04-28

Utworzono: 2024-04-28 13:38

Czasami użycie klasy zawierającej wyłącznie metody statyczne i pola statyczne może być bardzo przydatne.


Przykładem mogą być klasy pomocnicze (ang. utility classes) takie jak java.lang.Math, java.util.Arrays, które grupują metody związane z operacjami matematycznymi lub tablicami. Można również zebrać w nich statyczne metody fabrykujące (ang. static factory methods) jak w przypadku java.util.Collections, które tworzą obiekty implementujące określone interfejsy.


Takie klasy pomocnicze mogą być używane bez konieczności definiowania zmiennych lub metod instancji, co eliminuje potrzebę konstruktorów. Jednakże, jeśli konstruktor nie zostanie zdefiniowany jawnie, kompilator automatycznie wygeneruje publiczny konstruktor domyślny. W rezultacie użytkownik nie jest w stanie odróżnić, czy konstruktor został utworzony automatycznie.


Aby temu zapobiec, czasem stosuje się klasy abstrakcyjne. Jednakże, klasy abstrakcyjne nie blokują tworzenia instancji. Wystarczy utworzyć klasę potomną, aby móc utworzyć instancję.



Dlatego, aby uniemożliwić tworzenie instancji klasy pomocniczej, należy ustawić modyfikator dostępu konstruktora na private.



Jeśli modyfikator dostępu konstruktora domyślnego jest ustawiony na private, dostęp do niego z zewnątrz klasy jest zabroniony. Dodatkowo, w przypadku wywołania konstruktora domyślnego z wnętrza klasy, zostanie wygenerowany wyjątek.


Takie prywatne konstruktory mogą być trudne do zrozumienia dla użytkownika, dlatego warto dodać komentarze wyjaśniające ich działanie. Należy również pamiętać, że ustawienie konstruktora na private uniemożliwia dziedziczenie z tej klasy.


Źródło

Komentarze0