空对象模式是否会使调试变得更加复杂?

Does the null object pattern make debugging more complicated?

我想知道在某些情况下,空对象模式是否真的会使调试变得更加困难。例如,如果一个方法 returns 一个 "empty" 对象而不是 null 那么它就不会抛出错误。就可靠、干净的代码而言,这很好,但这不意味着现在使用的是一个空对象,它基本上不执行任何可能导致意外错误的操作。现在没有任何东西可以帮助定位问题,而不是用一个空异常来向程序员指出问题所在。

是的,它 可以 因为如果你的 null 对象必须 return 一个值(如你的例子)你只是推迟了 null 问题并且仍然需要检查对于空值。

我发现空对象在满足两个条件时非常有用。

  1. 您只调用了没有 return 值的方法。
  2. 您不想在没有价值时忽略操作。

一个简单的例子就是一个回调。

class Callback {
   void onDoSomething(SomeArg someArg);
}

通常您必须在使用回调之前进行空检查

if (callback != null) {
    callback.onDoSomething(someArg);
}

使用空对象模式,您可以将回调的默认值设置为空对象,并避免在其余代码中进行空检查。更少的样板代码使得更容易看到重要的部分。