Тип второго параметра не совпадает.Конструктор B
принимает Collection<? extends B<? extends R>>
, но конструктор суперкласса принимает Collection<? extends A<? extends T>>
.
Вы определили T
как Pair<R, R>
в своем классе B
, поэтому вместо R
, используйте Pair<R, R>
.Также должна совпадать часть ? extends
, поэтому измените ? extends B<...>
на ? extends A<...>
.Сигнатура конструктора B теперь выглядит следующим образом:
B(Pair<R,R> pair, Collection<? extends A<? extends Pair<R, R>>> cOfBs)
Это должно быть точно ? extends A
, поскольку ? extends B
может не совпадать с ? extends A
.Единственный способ сопоставить это - ввести другой параметр типа в A
, представляющий тип «self», и использовать его во втором параметре конструктора.
class A<T, S extends A<T, S>> {
A(T t, Collection<? extends S> cOfAs) {
}
}
Затем в B
, поставьте B<R>
как "я".
class B<R> extends A<Pair<R,R>, B<R>> { // Pair is just a POJO class
B(Pair<R,R> pair, Collection<? extends B<R>> cOfBs) {
super(pair, cOfBs);
}
}