Я пытаюсь написать класс утверждений для своего пользовательского класса.
public class ChangeCollector<T>
extends ArrayList<ChangeEntry<T>>
и я пишу
public class ChangeCollectorAssert
<T, EA extends AbstractAssert<EA, ChangeEntry<T>>>
extends AbstractListAssert
<ChangeCollectorAssert<T, EA>, ChangeCollector<T>, ChangeEntry<T>, EA>
и это ругается
Type parameter 'ChangeCollector' is not within its bound;
should implement 'java.util.List<? extends ChangeEntry<T>>'
но похоже, что он реализует List
, не так ли?
Разве ArrayList<ChangeEntry<T>>
нельзя присвоить List<? extends ChangeEntry<T>>
?
ОБНОВЛЕНИЕ
Я написал следующий код:
private static <T> void test01() {
List<? extends T> list1;
ChangeCollector<T> list2 = new ChangeCollector<T>();
list1 = list2; // ok!
}
и компилируется нормально
Нет, не скомпилировалось нормально. Я перепутал компилятор и чекер. Но в чем проблема с этим преобразованием?
List
, этоjava.util.List<? extends ChangeEntry<T>>
есть большая разница между этим иArrayList<ChangeEntry<T>>
, потому что это не так. - person   schedule 02.09.2016ChangeCollector<ChangeEntry<T>>
не должно бытьChangeCollector<T>
?ChangeCollector<ChangeEntry<T>>
расширяетArrayList<ChangeEntry<ChangeEntry<T>>>
. - person user2357112 supports Monica   schedule 02.09.2016public class ChangeCollector<T extends ChangeEntry<?>> extends ArrayList<T> {
- person Bohemian♦   schedule 02.09.2016