Kiedy warto używać enum w Java?

Kiedy warto używać enum w Java?
0

Kiedy warto użyć typu enum w Java?

W języku C jest to łatwiejsze do wyczucia, ponieważ nie ma tu klas. Wtedy osoba jest raczej skazana na switch. Moim powodem do używania enum było tylko to, żeby kompilator ubezpieczał mnie (wtedy zamiast intów mogłem sobie wyselekcjonować kilka wartości i na nich się opierać)

W Javie typ enum jest dla mnie wieloznaczny. Trochę mi przypomina to enum z C, a trochę niepełnosprawną klasę. Enum z C coraz mniej wydaje się użyteczny w Java, bo przecież lepiej jest unikać switchów, natomiast iść w kierunku niekompletnej klasy to też wydaje mi się dziwne..

Koziołek
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:około 11 godzin
  • Lokalizacja:Stacktrace
  • Postów:6822
5

Naprzykład tam gdzie chcesz ograniczyć liczbę stanów dla obiektów. Przykład płeć. Lepiej wygląda:

Kopiuj
public enum Sex{
    M, F
}

niż

Kopiuj
public class Sex {

     private Sex(){}

     public static final Sex m = new Sex();
     public static final Sex f = new Sex();
//...
}

albo jeszcze ciekawsza wersja, którą możesz spotkać w starym kodzie

Kopiuj
public class Sex {

     private Sex(){}

     public static final int m = 0;
     public static final int f = 1;

}

Innym przykładem może być bardzo specyficzna implementacja singletonu:

Kopiuj
public enum Singleton{
     INSTANCE

     // metody, stan itp.
}

Kolejna sprawa to switch, ale taki bardziej "na wypasie", bo powiązany ze wzorcem strategii.

Kopiuj
enum Visibility{
    
    Visible {
        @Override
        void render(Element e, Document d) {
            document.attach(e);
        }
    }, Unvisible {
        @Override
        void render(Element e, Document d) {
            // do nothing
        }
    };
    
    abstract void render(Element e, Document d);
    
}

// i dalej w kodzie 
    
public void rendering(Doocument d){
    this.visibility.render(this, d);
}

Do tego oczywiście wszlekiej maści flagi i markery dla których zwykły boolean nie wystarcza.

  • edit: nawet mamy coś na ten temat w kompendium....* Enum

Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
edytowany 2x, ostatnio: Koziołek
Atlas500
  • Rejestracja:około 11 lat
  • Ostatnio:prawie 9 lat
  • Postów:82
0

Jeżeli z góry znasz liczbę obiektów danego typu i chcesz zabezpieczyć kod przed tworzeniem nowych, wtedy warto użyć wyliczenia. Samo wyliczenie jest klasą (dziedziczy po Enum) ale obiekty zawarte są również pełnoprawnymi instancjami klasy zdefiniowanej "na miejscu"; używa się na nich konstruktora, mogą mieć własne pola itd. Nie ma w nich nic niepełnosprawnego, tyle tylko, że zmienne te są finalne.


"Jeżeli człowiek to wymyślił, człowiek może to zrozumieć." Sochacki
edytowany 1x, ostatnio: Atlas500

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.