Я пытаюсь понять, почему это JUnit утверждение дает мне ошибку времени компиляции:Используя общие ограниченные символы при тестировании карт с JUnit
Map<String, Set<String>> actual = methodToTest();
assertThat(result, hasEntry("foo", new HashSet<String>(Arrays.asList("bar"))));
Если я пишу это так это работает отлично:
Map<String, Set<String>> actual = methodToTest();
Set<String> expected = new HashSet<String>(Arrays.asList("bar"));
assertThat(result, hasEntry("foo", expected));
ошибка компилятор из первого примера:
The method assertThat(T, Matcher<? super T>) in the type Assert is not
applicable for the arguments (Map<String,Set<String>>, Matcher<Map<?
extends String,? extends HashSet<String>>>)
HashSet<String>
является подтипом Set<String>
, так почему же это не работает?
Работает ли он в java8? – ZhongYu
Не уверен, что это было сделано в java 7. – acvcu
["wildcard hell"] (http://bayou.io/draft/Capturing_Wildcards.html#Wildcard_Hell) :) просто отбросил проблему ... – ZhongYu