null.collect() returns 空列表

null.collect() returns empty list

我在写单元测试的时候偶然发现在groovy下面是true

null.collect({ //Anything }) == []

我找不到原因。 groovy 的哪一部分给出了这种行为?我检查了 NullObject 但没有这种收集方法。那么这是怎么发生的呢?

collect 方法在运行时通过 DefaultGroovyMethods class 添加到所有对象,参见 here,所以每个 class 都有这个方法:

class Lol {}

assert new Lol().collect({}) == [null]
assert new Lol().iterator().toList() //is not empty, contains 'this'

在 groovy 中 nulliterator() 方法,其中 returns 是一个空迭代器。在 null 上调用 collectnull.iterator().collect({/*whatever*/}) 相同,因此这将是 [].

查看对此的评论 bug report