在Java中有一个静态的"NULL"对象?

Iva*_*van 7 java null

在浏览我正在使用的库的一些代码时,我遇到了这段代码:

public class SomeClass {

     private static final class Null {
        /* ... */
     }

     public static final Object NULL = new Null();

}
Run Code Online (Sandbox Code Playgroud)

这是一个常见的做法,为一个使用而不是Java的类使用一个特殊的NULL对象null?这样做有什么好处而不是使用内置的Java null

我很好奇的主要原因是在使用库时,我一直在检查SomeClass是否为null,而没有意识到他们使用了一个特殊的NULL对象来表示SomeClass的null对象.

编辑:对于那些想知道,源的确切代码是:

public class JSONObject {
     private static final class Null {
        protected final Object clone() {
            return this;
        }
        public boolean equals(Object object) {
            return object == null || object == this;
        }
        public String toString() {
            return "null";
        }
    }

    public static final Object NULL = new Null();
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 10

空对象模式可以偶尔是有用的-所以你不要使用空引用,但有中立的行为一个实际的对象.但是,你在那里实现的实现没有意义:

  • Null 没有扩展SomeClass,我期望它
  • NULL声明为Object,而不是SomeClass.

事实上,我会说代码没用.但是如果正确实施,模式可能很有用.