Задать вопрос
@User700

Можно ли использовать generic наподобие шаблонов из C++?

Можно ли как-то реализовать такое:
private LongPollServer initServer (Resp1 r)  .....
private LongPollServer initServer (Resp2 r)  .....
private LongPollServer initServer (Resp3 r)  .....

protected <R> void run (ApiRequest<R> req)
{
    .....
    LongPollServer lps = initServer((R)req.exec());
    .....
}

Известно, что run будет вызываться от типов, которые наследуются от ApiRequestBuilder[ApiReqest[Resp1],Resp1], который наследуется от ApiReqest[Resp1]. И аналогично с 2,3. Квадратные скобки читать как угловые.
exec вернёт Resp1,2,3 соответственно.
Возможно нужно использововать generic с вопр. знаком...
  • Вопрос задан
  • 62 просмотра
Подписаться 1 Средний 1 комментарий
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Java-разработчик
    10 месяцев
    Далее
  • Skillbox
    Java-разработчик
    8 месяцев
    Далее
  • Нетология
    Java-разработчик с нуля
    12 месяцев
    Далее
Решения вопроса 1
@User700 Автор вопроса
В итоге написал такое:
private LongPollServer initServer (Object lpServerResponse) {
		if (lpServerResponse instanceof GetLongPollServerResponse)
          return new LongPollServer()
                .setKey(((GetLongPollServerResponse)lpServerResponse).getKey())
                .setTs(((GetLongPollServerResponse)lpServerResponse).getTs())
                .setServer(((GetLongPollServerResponse)lpServerResponse).getServer());
		else if (lpServerResponse instanceof com.vk.api.sdk.objects.messages.responses.GetLongPollServerResponse)
		  return new LongPollServer()
                .setKey(((com.vk.api.sdk.objects.messages.responses.GetLongPollServerResponse)lpServerResponse).getKey())
                .setTs(((com.vk.api.sdk.objects.messages.responses.GetLongPollServerResponse)lpServerResponse).getTs().toString())
                .setServer(((com.vk.api.sdk.objects.messages.responses.GetLongPollServerResponse)lpServerResponse).getServer());
		else
		  return new LongPollServer()
                .setKey(((com.vk.api.sdk.objects.callback.longpoll.responses.GetLongPollServerResponse)lpServerResponse).getKey())
                .setTs(((com.vk.api.sdk.objects.callback.longpoll.responses.GetLongPollServerResponse)lpServerResponse).getTs())
                .setServer(((com.vk.api.sdk.objects.callback.longpoll.responses.GetLongPollServerResponse)lpServerResponse).getServer());
    }

Но не работает уже по другим причинам :(
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы