Groovy NullObject应该为null?

时间:2012-10-25 12:55:29

标签: reflection groovy null-object-pattern

这个例子可以在groovy控制台中轻松测试。

var a被评估为非null,而b被评估为null。

两者都是org.codehaus.groovy.runtim.NullObject

的实例
def b = null

println b.getClass()
println b == null

def a = null.getClass().newInstance()

println a.getClass()
println a == null

有谁知道为什么?

处理反射代码时,这是一个棘手的事情。

2 个答案:

答案 0 :(得分:1)

其实我想知道这不是一个bug。作为解释... NullObject是运行时/中​​间类型的Object。如果对null执行任何操作,则使用NullObject。这个,以及NullObject#equals的实现说明= = null返回true。它返回失败,因为之前有一些内部代码,例如确定是否调用compareTo而不是equals等。现在这段代码以

开头
if (left == right) return true; 
if (left == null || right == null) return false;

所以null == null将返回true,但NullObject == null将返回false。另一方面,如果可能,NullObject不应泄漏。也许我们应该修复newInstance()来返回null。

我为此填写了http://jira.codehaus.org/browse/GROOVY-5769

答案 1 :(得分:0)

在NullObject的equals方法中,只有you are comparing ittrue才会返回null

由于NullObject的实例并非严格null,因此会返回false ...

NullObject如果您针对另一个true致电equals,是否应该返回NullObject,这可能是邮件列表中最好问的问题......我会看看并看看我是否能找到任何先前的问题。