我想知道在某些情况下,空对象模式是否真的会使调试更加困难。例如,如果一个方法返回一个"空"对象而不是一个 null,那么它不会抛出错误。就可靠、干净的代码而言,这很好,但这并不意味着现在正在使用一个空对象,它基本上不做任何可能导致意外错误的事情。现在没有一个空异常来将程序员指向问题,现在没有什么可以帮助找到它。
是的,它可以,因为如果您的空对象必须返回一个值(如您的示例所示(,您只是推迟了空问题,并且仍然需要检查空值。
我发现空对象在满足两个条件的情况下非常有帮助。
- 您只是调用没有返回值的方法。
- 当没有价值时,您不想忽略操作。
一个简单的例子是回调。
class Callback {
void onDoSomething(SomeArg someArg);
}
通常,您必须在使用回调之前执行空检查
if (callback != null) {
callback.onDoSomething(someArg);
}
使用 null 对象模式,可以使回调的默认值为 null 对象,并避免在代码的其余部分进行 null 检查。更少的样板代码可以更轻松地查看重要部分。