• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Prywatny konstruktro

42 Warsaw Coding Academy
0 głosów
136 wizyt
pytanie zadane 9 marca 2019 w Java przez periedynek Obywatel (1,320 p.)
Cześć. Mam pytanie odnośnie prywatnego konstruktora w Javie.

Wiem, ze się takowy zrobić i wiem, że nie można utworzyć instancji takiej klasy, która ma prywatny konstruktor. Można zrobić natomiast metodę tworząca konstruktor przez co wiemy, że instancji tej klasy jest tylko 1.

Czy coś jeszcze powinienem o tym wiedzieć poza tym co napisałem, czy są jeszcze jakieś plusy tego?

1 odpowiedź

0 głosów
odpowiedź 9 marca 2019 przez mbabane Szeryf (79,260 p.)

 Można zrobić natomiast metodę tworząca konstruktor przez co wiemy, że instancji tej klasy jest tylko 1. 

A to nie do końca. Rozważ to:

class SomeClass {
    private SomeClass()
    {
    }

    public static SomeClass newInstance() {
        return new SomeClass();
    }
}

public class Main
{
    public static void main(String[] args)
    {
        SomeClass instance1 = SomeClass.newInstance();
        SomeClass instance2 = SomeClass.newInstance();

        System.out.println(instance1 == instance2);
    }
}

 

komentarz 9 marca 2019 przez periedynek Obywatel (1,320 p.)

Pewnie trzeba zastrzec w jakiś sposób w metodzie, żeby była tylko jedna instancja, tak?

Np. tak:

public static SomeClassnewInstance() {
        if (instance == null) {
            instance = new SomeClass();
        }
        return instance;
    }

W takim razie co nam daje konstruktor prywatny? Jeżeli uściślę to, że może nam się on przydać do Singeltonu?

komentarz 9 marca 2019 przez mbabane Szeryf (79,260 p.)

Prócz singletonu, chowanie konstruktorów może też służyć do robienia metod fabrycznych. W przykładzie, który pokazałem, jest to taka najprostsza faktorka. Największą zaletą takich faktorek jest to, że można im nadawać dowolną nazwę. W przypadku użycia konstruktorów jesteśmy skazani na nazwę klasy, co nierzadko powoduje zastanowienie po co to jest. Na przykład:

SomeClass instance1 = SomeClass.createFullInstance();
SomeClass instance2 = SomeClass.createOnlyWithMandatoryFields();
SomeClass instance3 = SomeClass.createEmptyInstance();

Tworząc prywatny konstruktor mówisz też, że instancja danej klasy nie ma sensu, bo jest to np. jakaś klasa pomocnicza. Na przykład Arrays, która ma narzędzia do tablic i nie ma potrzeby, by za każdym razem tworzyć jej instancje.

Sprawdź także tę książkę:

https://helion.pl/ksiazki/java-efektywne-programowanie-wydanie-iii-joshua-bloch,javep3.htm#format/b

Jest tam dużo porad i trików pod jave. Jest m.in. o tych metodach fabrycznych.

Podobne pytania

0 głosów
3 odpowiedzi 375 wizyt
pytanie zadane 24 kwietnia 2017 w Rozwój zawodowy, nauka, praca przez pulson666 Stary wyjadacz (12,560 p.)
0 głosów
1 odpowiedź 168 wizyt
pytanie zadane 9 lipca 2016 w Sieci komputerowe, internet przez Kamil Czech Dyskutant (7,700 p.)
0 głosów
3 odpowiedzi 595 wizyt

93,385 zapytań

142,384 odpowiedzi

322,540 komentarzy

62,745 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...