@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 с вопр. знаком...
  • Вопрос задан
  • 58 просмотров
Решения вопроса 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());
    }

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

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

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