2014-09-30 103 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(); 
     } 
    } 
} 

评论是我的。 ;)