为什么Guava(14.0.1)MultiMap putAll不能用Groovy @TypeChecked编译?

时间:2014-10-20 23:16:57

标签: groovy guava

我有以下groovy代码:

import com.google.common.collect.LinkedListMultimap
import groovy.transform.TypeChecked

@TypeChecked
class TestMulti {
    public static void main(String[] args) {
        LinkedListMultimap<String, Dummy> multi = LinkedListMultimap.create()
        List<Dummy> l = [new Dummy(x: 1)]
        multi.putAll("TEST", l)
        println multi
    }
}

class Dummy {
    int x
}

使用guava-14.0.1时,此代码无法编译并显示错误:

Error:(11, 9) Groovyc: [Static type checking] - Cannot find matching method com.google.common.collect.Multimap#putAll(java.lang.String, java.util.List <Dummy>). Please check if the declared type is right and if the method exists.

但据我所知,该方法应该存在得很好。文档列表:

public boolean putAll(@Nullable K key,
                      Iterable<? extends V> values)

on class LinkedListMultimap<K,V>

并且相同的代码在没有@TypeChecked的情况下运行良好。

(请注意,自15.0以来,guava版本似乎缺少这个问题,但目前我感兴趣的是为什么这个代码不能在14.0.1及更早版本上编译。我在更改说明中没有看到任何内容表明这是故意修复的内容,看起来应该工作。)

为什么不进行编译?

1 个答案:

答案 0 :(得分:0)

看起来这是groovy 2.2中的一个问题。当我切换到groovy 2.3.6时,它编译得很好。