Определил абстрактный класс:
@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 < ? > >). Где вместо ? надо указать возвращаемый тип. Поэтому я хотел сделать суперкласс от него реализовать все возможные в этом методе классы и уже вместо ? указать супер класс, а возвращать уже дочерние классы.
Подскажите, как правильно решается такая задача. Когда заранее не известно, какой тип объекта должен вернуть метод контроллера?
Так должно работать:
List<? extends Parameter> list = new ArrayList<ParameterDTO>()
Таким образом ты явно задаёшь требование что твой женерик допускает наследников. Иначе работать не будет. Джава это строго типизированный язык, поэтому с очевидностью здесь строго.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости