Вернуть ?расширяет тип - PullRequest
       36

Вернуть ?расширяет тип

0 голосов
/ 25 сентября 2019

Я хочу, чтобы подпись метода выглядела так:

public <? extends IDto> convertToResponseDto();

Я придумал это из действительной подписи, которая выглядит следующим образом:

public List<? extends IDto> convertToResponseDto();

Как оказалосьType <? extends IDto> не является допустимым типом возврата.Я чувствую, что намерение того, что я пытаюсь вернуть, совершенно ясно, но я не уверен, что правильный синтаксис

РЕДАКТИРОВАТЬ

На этот вопрос ответил @ErwinBolwidt, но дает новую проблему в случае использования.У меня есть случай, когда я использую дженерики:

protected final <E extends IDto> E findOneInternal(final Long id) {
        return getService().findOne(id).convertToResponseDto();
}

В этом случае convertToResponseDto () возвращает IDto, а не конкретный класс, так как он не известен в этой точке, потому что он получает службу типа T

Ответы [ 2 ]

2 голосов
/ 25 сентября 2019

Вы можете переопределить метод интерфейса или метод суперкласса с более конкретным подтипом в качестве возвращаемого типа.Скажем, ваш суперкласс говорит:

public IDto convertToDTO()

Тогда ваш подкласс может сказать:

public MySpecificDTO convertToDTO() 

Это подразумевается языком Java и не нуждается в каких-либо обобщениях.

0 голосов
/ 25 сентября 2019

Вы можете определить универсальный тип

public <T extends IDto> T convertToResponseDto();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...