我有以下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及更早版本上编译。我在更改说明中没有看到任何内容表明这是故意修复的内容,看起来应该工作。)
为什么不进行编译?
答案 0 :(得分:0)
看起来这是groovy 2.2中的一个问题。当我切换到groovy 2.3.6时,它编译得很好。