Вы не можете просто присваивать или приводить ограниченные универсальные классы к их подтипу только с учетом параметра типа.Проще говоря, в Java, когда появился generic, была введена еще одна функция под названием Type Erasure .Generic позволяет выполнять строгую проверку типов во время компиляции, но не во время выполнения.Компилятор заменяет типы параметров типа фактическими типами, поэтому среда выполнения не знает о параметрах типа.
С type erasure
претерпевает что-то подобное;если универсальный класс - что-то вроде этого;
public class Node<T> {
private T data;
private Node<T> next;
public Node(T data, Node<T> next) {
this.data = data;
this.next = next;
}
public T getData() { return data; }
// ...
}
После компиляции класс станет чем-то похожим на это;(Примечание -> T
тип здесь не связан)
public class Node {
private Object data;
private Node next;
public Node(Object data, Node next) {
this.data = data;
this.next = next;
}
public Object getData() { return data; }
// ...
}
Если тип T
связан, как в вашем случае;
public class Node<T extends Comparable<T>> {
private T data;
private Node<T> next;
public Node(T data, Node<T> next) {
this.data = data;
this.next = next;
}
public T getData() { return data; }
// ...
}
станет примерно такимкласс после компиляции;
public class Node {
private Comparable data;
private Node next;
public Node(Comparable data, Node next) {
this.data = data;
this.next = next;
}
public Comparable getData() { return data; }
// ...
}
То же самое происходит и с универсальными методами из-за стирания типа.Так что в вашем случае
protected final List<? extends IDto> findPaginatedAndSortedInternal(page, size, sortBy, sortOrder, uriBuilder, response){
//...
}
стал таким во время компиляции;
protected final List<IDto> findPaginatedAndSortedInternal(page, size, sortBy, sortOrder, uriBuilder, response){
//...
}
Теперь представьте, что в вашей функции public List<FollowingResponseDto> findAllPaginatedAndSorted(...)
вы возвращаете тип экземпляра List<IDto>
findPaginatedAndSortedInternal
метод.Таким образом, его универсальный тип - это класс super
класса FollowingResponseDto
.Вот почему вы получаете эту ошибку компиляции.
Это поможет понять, что вы сделали не так.