我已经使用了Groovy五个小时了,刚好遇到了Groovy NullObject 。我读了Groovy的explanation of the Null Object Pattern,但是它没有直接触及NullObject类。 NullObject是否仅打算用作NullTreeNullJob之类的基类?我在需要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。

10-07 15:42