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