2015-07-22 2 views
1

Я не совсем уверен, если проблема, которую я имею имеет простое решение, но вот фрагмент кода:Дженерики в Hamcrest Matchers

Map<?,?> m = dbo.toMap(); 
assertThat(m, Matchers.<Object, Object>hasEntry(is(someKeyValue), is(notNullValue()))); 

Я должен добавить эти дженерики, чтобы успокоить компилятор, но почему может» это будет проще? Почему мне нужно добавить подстановочный знак в переменную m? Почему это не может быть, по крайней мере:

assertThat(dbo.toMap(), hasEntry(is((Object)someKeyValue), is(notNullValue()))); 

Вот simple project. В контрольных линиях блока, что беспокоит меня:

// this one doesn't quite work 
DBObject dbo = returnSomeDBObject(); 
Map m3 = dbo.toMap(); 
assertThat(m3, hasEntry(is((Object)PSF_KEY), is(notNullValue()))); 

// but this one does 
DBObject dbo2 = returnSomeDBObject(); 
Map<?,?> m4 = dbo.toMap(); 
assertThat(m4, Matchers.<Object, Object>hasEntry(is(PSF_KEY), is(notNullValue()))); 
+0

Фактически должен работать на Java 7 и 8. Покажите нам полный, параметризованный пример и как он сбой (ошибка компиляции и т. Д.) –

+0

Я добавил ссылку на проект и выдержку кода, иллюстрирующую вопрос – EvgeniySharapov

ответ

0

Вы можете использовать «сырой» Искатель:

DBObject dbo = returnSomeDBObject(); 
Map m3 = dbo.toMap(); 

assertThat(m3, (Matcher)hasEntry(is("PSF_KEY"), is(notNullValue()))); 

Кстати, вы можете использовать метод Matchers.hasKey утверждать, что отображение имеет запись с определенным ключом:

assertThat(m3, (Matcher)hasKey("PSF_KEY")); 

Однако имейте в виду, что это не похоже на семантически то же самое, что и у елей t при использовании значений null на карте.

Смежные вопросы