2011-07-28 9 views
6

Jest to kod:nie mogę skompilować hasKey hamcrest() metoda

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

To co kompilator mówi:

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

Dlaczego i co mogę zrobić?

Odpowiedz

15

Podejrzewam trzeba coś takiego:

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

ten sposób można określić typ wartości dla wywołania hasKey metody. Wygląda jednak paskudnie i jestem nieco zaskoczony, że propozycja typu nie pomaga ...

+0

To mnie nękało od lat. Lata! Dzięki, Jon. – Trenton

7

Wygląda na to, że trafiłeś ten sam błąd co ja. Czy to w Hamcrest> 1.1? Zmieniono generyczne w ich matcherach między 1.1 a 1.2. I wniósł Hamcrest błąd tutaj: http://code.google.com/p/hamcrest/issues/detail?id=143

ale okazuje się, że jest to faktycznie błąd w kompilator, który nie może być ustalona w JDK 6, ale jest już ustalona 7: http://bugs.sun.com/bugdatabase/view_bug.do;jsessionid=72ce99618021685c3570069c8f60b?bug_id=7034548

Jon wspomniano, istnieje kilka sposobów obejścia tego problemu, ale wszystkie one łamią ładny, płynny interfejs Hamcrestu.

Powiązane problemy