这个例子可以在groovy控制台中轻松测试 .
当a被评估为null时,var a被评估为非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 回答
其实我想知道这不是一个bug . 作为解释... NullObject是运行时/中间类型的Object . 如果对null执行任何操作,则使用NullObject . 这个,以及NullObject#equals的实现说明= = null返回true . 它返回失败,因为之前有一些内部代码,例如确定是否调用compareTo而不是equals等 . 现在这段代码开头
所以null == null将返回true,但NullObject == null将返回false . 另一方面,如果可能,NullObject不应泄漏 . 也许我们应该修复newInstance()来返回null .
为此,我填写了http://jira.codehaus.org/browse/GROOVY-5769
在NullObject的equals方法中,如果you are comparing it到
null
,它只返回true
由于
NullObject
的实例不严格null
,它返回false ...是否
NullObject
应该返回true
如果你打电话equals
对另一个NullObject
可能是一个问题在邮件列表上最好问...我会看一看,看看我是否能找到任何先前的问题 .