У меня есть интерфейс A
, который реализует класс B
.
Работает следующий универсальный метод
public static <T, U extends T> List<T> listFactory(Collection<U> source) {
return new ArrayList<T>(source);
}
но
public static <T> List<T> listFactory(Collection<? extends T> source) {
return new ArrayList<T>(source);
}
не (ошибка компиляции, несоответствие типов), когда я направляю вывод в
List<A> tester = listFactory(B.defaultCollectionFactory(3));
defaultCollectionFactory(int count)
статически предоставляет набор B
с, со схемой маркировки по умолчанию.
Есть идеи, почему это так? Похоже, универсальный U и подстановочный знак делают то же самое.