Я не могу скомпилировать HamCrest метод hasKey () - PullRequest
6 голосов
/ 29 июля 2011

Это код:

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 ]

15 голосов
/ 29 июля 2011

Я подозреваю, что вам нужно что-то вроде:

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

Таким образом, вы можете указать тип значения для вызова метода hasKey. Выглядит довольно уродливо, и я немного удивлен, что вывод типа не поможет вам ...

7 голосов
/ 29 июля 2011

Звучит так, как будто вы попали в ту же ошибку, что и я. Это в 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.

...