Несовместимый тип Java List<Cуперкласс> = List<Дочений>

85
25 ноября 2021, 01:30

Определил абстрактный класс:

@Data
public abstract class Parameter {
    private Long id;
    private String title;
    private boolean cumulative;
}

Создал на его основе дочерний:

@Data
public class ParameterDTO extends Parameter {
    private GroupParametersDTO group;
}

Пытаюсь переменной с типом List<Parameter> присвоить значение с типом List<ParameterDTO> выдает ошибку:

Incompatible types
Required: List<Parameter>
Found: List<ParameterDTO>

Я думал, что вместо суперкласса можно использовать дочерний(полиморфизм)? Или я что-то не правильно понял?

P.S. Вообще задача в следующем: метод контроллера в Spring в зависимости от переденных в запросе к серверу параметров, должен возвращать разные объекты(а точнее ResponseEntity < List < ? > >). Где вместо ? надо указать возвращаемый тип. Поэтому я хотел сделать суперкласс от него реализовать все возможные в этом методе классы и уже вместо ? указать супер класс, а возвращать уже дочерние классы.

Подскажите, как правильно решается такая задача. Когда заранее не известно, какой тип объекта должен вернуть метод контроллера?

Answer 1

Так должно работать:

List<? extends Parameter> list = new ArrayList<ParameterDTO>()

Таким образом ты явно задаёшь требование что твой женерик допускает наследников. Иначе работать не будет. Джава это строго типизированный язык, поэтому с очевидностью здесь строго.

READ ALSO
Spring cloud, auth-service

Spring cloud, auth-service

Создаю приложение на микросервисной архитектуре с использованием Spring Boot, Spring CloudКак пример я смотрю вот этот репозиторий

196
Java Timer Animation

Java Timer Animation

Необходимо по таймеру увеличивать и уменьшать сферу например за 5 секунд увеличить и за 5 секунд уменьшить, этот код работает, ну я не знаю...

182
защита desktop-приложения на java

защита desktop-приложения на java

Есть старый проект(xul, tomcat 5, jdk 15, hibernate, firebird и т

99
Как поделить предложение таким образом с помощью регулярных выражений?

Как поделить предложение таким образом с помощью регулярных выражений?

У меня есть предложение, мне нужно его разделить на слова вот таким образом и раскидать по ячейкам массиваЯ пробовала сначала split, но оказалось,...

79