Reflection Groovy NullObject是否应为null?

Reflection Groovy NullObject是否应为null?,reflection,groovy,null-object-pattern,Reflection,Groovy,Null Object Pattern,这个示例可以在groovy控制台中轻松测试 变量a的计算结果为非空,而b的计算结果为空 两者都是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 有人知道为什么吗 在处理反射代码时,这是一件棘手的事情。

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

变量a的计算结果为非空,而b的计算结果为空

两者都是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
有人知道为什么吗


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

在NullObject的equals方法中,如果要
null,它只返回
true

由于
NullObject
的一个实例不是严格意义上的
null
,因此它返回false


如果对另一个
NullObject
调用
equals
,则
NullObject
是否应返回
true
,这可能是邮件列表中最好的问题。。。我会看一看,看看是否能找到前面的问题。

实际上,我想知道这是否是一个bug。作为解释。。。NullObject是一种运行时/中间类型的对象。如果您在null上执行任何操作,则使用NullObject。这和NullObject#equals的实现说明了a==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


我填写了这个

,但在这种情况下,两个对象都是空对象,对吗?或者“b”严格为null,而b.getClass()正在混淆它?是的,两个对象都是
NullObject
NullObject.equals
特别地(参见上面的链接)检查
到==null
,其计算结果为
false
NullObject!=Java实现中的null
。。。。我不确定我解释得很好…我不明白为什么。在这两种情况下,都会有“to==null”和“to”对象作为null对象。是的,在Java中(用哪个null对象编写),只有
null==null
<代码>空对象!=空