2

这个例子可以很容易地在 groovy 控制台中测试。

var 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

有谁知道为什么?

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

4

2 回答 2

1

其实我想知道这是否不是一个错误。作为解释...... 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。

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

于 2012-10-25T15:11:46.133 回答
0

在 NullObject 的 equals 方法中,它仅true您将其null

作为NullObjectis not strict的一个实例null,它返回 false...

如果你打电话反对另一个人是否NullObject应该返回可能是邮件列表中最好的问题......我会看看,看看我是否能找到任何以前的问题。trueequalsNullObject

于 2012-10-25T13:02:16.540 回答