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

Java - Domyślny konstruktor w enumach

Object Storage Arubacloud
0 głosów
494 wizyt
pytanie zadane 16 listopada 2018 w Java przez allenkun Początkujący (400 p.)

Pracując z enumami, natrafiłem na bardzo ciekawy przypadek. Tak jak podczas definiowania klas nie podamy żadnego konstruktora, to wiemy że klasa posiada domyślny konstruktor bez argumentów. Jednak gdy w naszej klasie utworzymy konstruktor, który przyjmuje jakiś argument to nasz domyślny konstruktor zniknie i nie będziemy więcej mogli utworzyć obiektu naszej klasy bez podania żadnych argumentów przy jego tworzeniu. Bardziej konkretnie:

public class Person{

    private int age;

    public Person(int age)
    {
        this.age = age;
    }


}

W przypadku tej klasy, gdy będziemy chcieli utworzyć instancje w taki sposób:

Person pers = new Person();

Kompilator wyrzuci nam błąd bo nie podaliśmy argumentów. O dziwo w przypadku enumów takiego błędu nie otrzymujemy. Dla konkretu również podam przykład:

public enum CommandWord {
       
        GO("go"), QUIT("quit"), HELP("help"), LOOK, BACK, TAKE, DROP, ITEMS, UNKNOWN;
        
        private String commandString;
        
        private CommandWord(String commandString)
        {
            this.commandString = commandString;
        }
    }

Taki kod nie wyrzuca nam żadnego błędu. Czyli o ile z tego co się dowiedziałem enumy również posiadają domyślny konstruktor bez argumentów, to nawet po podaniu konstruktora z argumentami dalej moge tworzyć instancje wewnątrz enuma bez podania argumentów. Zdaje sobie oczywiście sprawe, że enum jest klasą specjalną i rządzi się innymi prawami niż inne klasy, aczkolwiek może jest ktoś w stanie mi wytłumaczyć jak to funkcjonuje w Javie w przypadku enuma. Czy domyślny konstruktor bezargumentowy dalej jest aplikowany nawet gdy podamy nasz wlasny konstruktor? Czy dziala to na innej zasadzie?

1
komentarz 16 listopada 2018 przez Aisekai Nałogowiec (42,190 p.)
Jesteś pewien, że kompilator dopuszcza utworzenie konstruktora parametrowego w enumie, w chwili gdy nie masz konstruktora prywatnego/protected? W enumie musi być taki konstruktor, a dodanie jakiegokolwiek innego konstruktora powoduje "usunięcie" konstruktora domyślnego (nawet w Enumie)
komentarz 16 listopada 2018 przez Wiciorny Ekspert (269,710 p.)
jest prywatny.
komentarz 16 listopada 2018 przez Aisekai Nałogowiec (42,190 p.)
A to sory, nie zauważyłem.
komentarz 17 listopada 2018 przez Wiciorny Ekspert (269,710 p.)
w pierwszej chwili też przyjąłem " Person" jako - enum i pomyslałem, że coś nie halo i jak to działa z konstruktorem default-no private

1 odpowiedź

0 głosów
odpowiedź 16 listopada 2018 przez Wiciorny Ekspert (269,710 p.)

The default constructor is private, has no formal parameters, and has no throws clause. This makes the enum non-instantiable even if no constructor is explicitly declared. An enum in java has a default constructor when it's is not defined and it's private.

 W twoim przypadku działa deklarowany,  wiec tylko przez taki konstruktor powołasz enum. 

Podobne pytania

0 głosów
1 odpowiedź 204 wizyt
pytanie zadane 31 stycznia 2021 w Java przez p_wel Nowicjusz (120 p.)
0 głosów
1 odpowiedź 3,131 wizyt
pytanie zadane 4 marca 2016 w Java przez Aisekai Nałogowiec (42,190 p.)
0 głosów
1 odpowiedź 149 wizyt

92,555 zapytań

141,403 odpowiedzi

319,560 komentarzy

61,941 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...