在RXJava [1]中,有一个枚举[2]定义为

public enum JavaFxObservable {
    ; // no instances


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

此技术使用没有实例的枚举的目的是什么?为什么不使用标准类?

  • [1] https://github.com/ReactiveX/RxJava
  • [2] https://github.com/ReactiveX/RxJavaFX/blob/0.x/src/main/java/rx/observables/JavaFxObservable.java
  • 最佳答案



    您以最简单的方式定义这是一个没有实例的类,即它是实用程序类。


    enum是一个类。对于私有(private)构造函数,它也是最终的。你可以写

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

    评论是我的。 ;)

    10-04 10:13