2014-09-30 26 views
6

W RXJava [1] nie jest enum [2] określono jakoJava enum bez przypadkach

public enum JavaFxObservable { 
    ; // no instances 


    public static void staticMethod() { 
     // ... 
    } 
} 

Jaki jest cel tej techniki przy użyciu enum bez przypadkach? Dlaczego nie skorzystać ze standardowej klasy?


+1

Nie jestem pewien, ale myślę, że może to być czysty sposób, aby zapobiec rozszerzaniu lub tworzeniu instancji – user902383

+0

Ta "klasa" jest po prostu repozytorium funkcji statycznych (i/lub stałych). Wykład nie może być przedłużony, jest klasą końcową. Alternatywą byłoby stworzenie klasy ostatecznej lub abstrakcyjnej z prywatnym konstruktorem. Co jest bardziej szczegółowe. BTW enum jest również używany do singleton, z bezpiecznej inicjalizacji współbieżności. –

+0

"Dlaczego nie używać standardowej klasy?" czy możesz podać przykład, jak taka klasa standardowa byłaby lepsza/prostsza? –

Odpowiedz

5

Jaki jest cel tej techniki przy użyciu enum bez przypadkach?

Definiujesz w najprostszy sposób, że jest to klasa, która nie ma instancji, tj. Jest klasą użytkową.

Dlaczego nie używać standardowej klasy?

An enum to klasa. Jest także ostateczny z prywatnym konstruktorem. Możesz napisać:

public final class JavaFxObservable { 
    private JavaFxObservable() { 
     throw new Error("Cannot create an instance of JavaFxObservable"); 
    } 
} 

Ale to jest bardziej szczegółowe i podatne na błędy. na przykład Widziałem to w rzeczywistym kodzie

public final class Util { 
    private Util() { 
    } 

    static void someMethod() { } 

    static class DoesSomething { 
     void method() { 
      // WAT!? we can still create this utility class 
      // when we wrote more code, but it's not as good. 
      new Util().someMethod(); 
     } 
    } 
} 

Komentarze są moje. ;)