越来越多的人声称你不应该返回null,而应该始终使用Null对象模式。当使用集合/映射/数组或调用布尔函数如isAuthenticated()时,我可以看到NOP的实用性,这里有展示。
我还没有找到完全令人信服的资料。请容我整理一下我的想法。
我的理解是,不要返回一个空对象,而是返回一个已经“清零”的有效对象。
因此,例如,客户端将调用以获取一个对象:
Car car = getCar();
如果不使用NOP,您需要在调用任何方法之前检查从getCar()返回的对象是否为null:
if (car != null){
color = car.getColor();
doScreenStuff(color);
}
使用NOP,代替getCar()
返回null,它现在返回一个已经被有效“清零”的对象。因此,现在我们不再需要做if (car != null)
,而是可以直接请求颜色。因此,我认为我们的“清零”对象在调用颜色时将返回“none”。这有什么帮助呢?似乎在空对象上向前移动并调用方法会引起与检查null一样的痛苦。现在,当显示信息时,我们需要检查颜色是否不是“none”,高度不是0,或者您拥有的其他值。因此,本质上,我们不是在处理开始时检查汽车是否为空,而是在之后检查我们拥有的汽车对象是真正的汽车还是替代品。也就是说,我们不想显示一堆空对象,所以我们需要一些方法来过滤掉所有的空对象。
这种过滤就像调用 if (car != null) 一样是一个额外的步骤。唯一的区别是,通过检查null,我们可以通过抛出异常停止处理,一旦发现汽车对象为null,而使用NOP我们在空对象上调用方法,并继续运行,直到该显示对象的时间到来,此时我们过滤掉空的对象。此外,您需要了解空对象返回的值。例如getColor()是否返回“none”或“empty”。
显然,我肯定忽略了一些东西。提前致谢。