null.collect()返回空列表

时间:2015-05-30 07:05:26

标签: groovy

当我碰巧在groovy中发现以下是true时,我正在编写单元测试

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

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

2 个答案:

答案 0 :(得分:2)

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

请参阅此bug report的评论。

答案 1 :(得分:1)

collect方法在运行时通过DefaultGroovyMethods类添加到所有对象,请参阅here,因此每个类都有此方法:

class Lol {}

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