2011-07-28 72 views
6

這是代碼:我不能編譯hamcrest hasKey()方法

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>>) 

爲什麼,我該怎麼辦?

回答

15

我懷疑你需要這樣的東西:

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

您可以指定hasKey方法調用中的值類型的方式。看起來屁股醜陋,但我有點驚訝,類型推斷不會幫你...

+0

這一年困擾了我多年。年份!謝謝,喬恩。 – Trenton

7

這聽起來像你碰到了同樣的錯誤,我做了。這是Hamcrest> 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

由於喬恩提到,有幾種方法可以解決它,但它們都打破了Hamcrest的流暢界面。