首页 文章

Groovy NullObject应该为null?

提问于
浏览
2

这个例子可以在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 回答

  • 0

    其实我想知道这不是一个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

    在NullObject的equals方法中,如果you are comparing itnull ,它只返回 true

    由于 NullObject 的实例不严格 null ,它返回false ...

    是否 NullObject 应该返回 true 如果你打电话 equals 对另一个 NullObject 可能是一个问题在邮件列表上最好问...我会看一看,看看我是否能找到任何先前的问题 .

相关问题