2011-07-28 21 views
6

Haskey hamcrest() Este es el código:no puedo compilar método

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

Esto es lo que está diciendo compilador:

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

¿Por qué y qué puedo hacer?

Respuesta

15

sospecho que necesita algo como:

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

De esta manera se puede especificar el tipo de valor para la llamada hasKey método. Aunque parece un poco feo, y estoy un poco sorprendido de que la inferencia de tipo no te ayude ...

+0

Esto me ha plagado durante años. ¡Años! Gracias, Jon. – Trenton

7

Parece que has golpeado el mismo error que yo. ¿Esto es en Hamcrest> 1.1? Cambiaron los genéricos en sus matchers entre 1.1 y 1.2. Yo presenté un error Hamcrest aquí: http://code.google.com/p/hamcrest/issues/detail?id=143

pero resulta que este es en realidad un error en el compilador que no pueden ser fijado en el JDK 6, pero ya está fijado en 7: http://bugs.sun.com/bugdatabase/view_bug.do;jsessionid=72ce99618021685c3570069c8f60b?bug_id=7034548

Como Jon mencionado, hay un par de formas de evitarlo, pero todos rompen la agradable y fluida interfaz de Hamcrest.