В Java 6 есть ошибка , связанная с этим.
Этот код будет выдавать различные ошибки, такие как «не могу найти символ ...»
assertThat(achievements, hasItem(isA(TestAchievement.class)));
Обходной путь для этого - объявить matcher как переменную и затем ссылаться на эту переменную. Важно отметить, что для этой работы очень важен тип переменной, в частности раздел generics.
Matcher<Iterable<? super TestAchievement>> matcher = hasItem(isA(TestAchievement.class));
assertThat(achievements, matcher);
Интересно, что если вы используете instanceOf()
вместо isA()
, вы снова столкнетесь с проблемой. (хотя, если вы проигнорируете предупреждения, это может сработать для вас в любом случае.) Расширяя предыдущее исправление, вы можете использовать:
Matcher<TestAchievement> itemMatcher = Matchers.instanceOf(TestAchievement.class);
Matcher<Iterable<? super TestAchievement>> matcher = hasItem(itemMatcher);
assertThat(achievements, matcher);