Хотя вывод типов не так силен, как хотелось бы, в этом случае виноват действительно API. Это излишне ограничивает себя без уважительной причины. Соответствующий метод is-empty работает с любой коллекцией, а не только с коллекциями определенного E
.
Предположим, API разработан таким образом
public class IsEmptyCollection implements Matcher<Collection<?>>
{
public static Matcher<Collection<?>> empty()
{
return new IsEmptyCollection();
}
}
тогда assertThat(list, empty())
работает как положено.
Вы можете попытаться убедить автора изменить API. Между тем вы можете иметь обертку
@SuppressWarnings("unchecked")
public static Matcher<Collection<?>> my_empty()
{
return (Matcher<Collection<?>>)IsEmptyCollection.empty();
}