2014-09-30 226 views
6

在RXJava [1]有[2]定義爲爪哇枚舉與沒有實例

public enum JavaFxObservable { 
    ; // no instances 


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

什麼目的使用枚舉沒有實例這種技術枚舉?爲什麼不使用標準課程?


+1

不確定,但我認爲這可能是乾淨的方式來防止擴展或創建實例 – user902383 2014-09-30 10:56:31

+0

這個「類」只是靜態函數(和/或常量)的存儲庫。一個枚舉不能被擴展,是最後一個類。另一種方法是用私有構造函數創建一個最終的或抽象的類。哪一個更詳細。 BTW枚舉也用於單例,併發安全初始化。 – 2014-09-30 10:58:25

+0

「爲什麼不使用標準課程?」你能舉出一個這樣的標準班怎麼會更好/更簡單的例子嗎? – 2014-09-30 10:58:42

回答

5

什麼目的使用枚舉沒有實例這種技術?

您正在以最簡單的方式定義這是一個沒有實例的類,即它是實用類。

爲什麼不使用標準類?

enum是一類。這也是一個私人構造函數的最終結果。你可以寫

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

但是,這是更詳細和容易出錯。例如我已經看到這在真實代碼

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(); 
     } 
    } 
} 

評論是我的。 ;)