我无法编译hamcrest hasKey()方法

时间:2011-07-28 21:31:55

标签: java generics junit hamcrest

这是代码:

Map<Foo, String> map;
org.hamcrest.MatcherAssert.assertThat(map, 
  org.hamcrest.Matchers.hasKey(new Foo()));

这就是编译器所说的:

cannot find symbol method assertThat(java.util.Map<Foo,java.lang.String>,
org.hamcrest.Matcher<java.util.Map<Foo,java.lang.Object>>)

为什么以及我该怎么办?

2 个答案:

答案 0 :(得分:15)

我怀疑你需要这样的东西:

MatcherAssert.assertThat(map, Matchers.<Foo, String>hasKey());

这样您就可以为hasKey方法调用指定值类型。看起来很丑陋,我有点惊讶,类型推断对你没有帮助......

答案 1 :(得分:7)

听起来你遇到了和我一样的错误。这是在Hamcrest&gt; 1.1?他们将匹配器上的泛型更改为1.1到1.2之间。我在这里提交了一个Hamcrest错误: http://code.google.com/p/hamcrest/issues/detail?id=143

但事实证明,这实际上是编译器中的一个错误,无法在JDK 6中修复,但已在7中修复: http://bugs.sun.com/bugdatabase/view_bug.do;jsessionid=72ce99618021685c3570069c8f60b?bug_id=7034548

正如Jon所说,有几种方法可以解决它,但它们都打破了Hamcrest的漂亮,流畅的界面。