我一直在使用Groovy五个小时,刚刚遇到Groovy NullObject
。我阅读了Groovy explanation of the Null Object Pattern,但它没有直接触及NullObject
类; NullObject
仅仅是NullTree
和NullJob
之类的基类吗?我在某些代码中得到了NullObject
,这些代码需要String
,而且它会导致失败,就像“常规”null
一样。
那么,NullObject
的目的是什么?或者,换句话说,NullObject
提供“常规”null
不具有什么价值?
答案 0 :(得分:8)
其目的是使用 null 对象而不是null
关键字。
在普通的Java null
中是一个特殊的关键字,它用于表示引用没有附加到任何对象..这工作正常,但它不处理你尝试做某事的情况 null 引用。
由于 null 引用不是对象,因此您无法对其执行任何操作,Java将引发NullPointerException
。相反,如果你有一个NullObject
你的引用将指向这一个而不是什么...当然这个NullObject
无法做任何事情,当你试图调用一个方法时在它上面什么都不会发生,但是不会抛出任何异常,因为通过NullObject
意味着“没有任何对象”它被实现为具有避免这些情况的明显结果的对象。
因此groovy可以处理像object?.methodName()
这样的事情。如果object是 null groovy将使用NullObject
,这样这个隐式检查会做类似的事情(也许这不是实际的实现,只是为了给你一个想法)
if (object instanceof NullObject)
return new NullObject();
else
return object.someMethod();
总之,需要克服在Java中使用 null 引用总是会导致NullPointerException
的事实。