Как передать универсальный интерфейс T в функцию со ссылкой на класс в качестве параметра

#kotlin #kotlin-android-extensions

#kotlin #kotlin-android-extensions

Вопрос:

У меня есть универсальный интерфейс для http-запроса retrofit2

 interface BaseGetRequest<T: Any>  {
@GET fun requestGet(@Url urlGetRequest: String,@FieldMap parameters: Map<String, String>): Single<T>
}
 

и теперь мне нужно передать BaseGetRequest в retrofit2 в качестве ссылки на класс, в Java это просто рассматривается как BaseGetRequest.java , но не разрешает в kotlin, потому что там указано несоответствие типов.

введите описание изображения здесь

Создатьвведите описание изображения здесь

Как мне это решить?

Комментарии:

1. показать метод создания NetworkUtils.builder

2. @AndreyDanilov Я обновил свой вопрос. Это действительно сработает, если я не использовал универсальный интерфейс, но я просто хотел использовать универсальный, поэтому мне не придется снова писать запрос интерфейса для моего другого http-запроса.

3. Извините за ошибку, созданную в retrofit2

Ответ №1:

По сути, вы должны возвращать тип, который хотите получить в качестве ответа.

Если вам не нужен результат, я бы рекомендовал использовать Completable вместо Single .

Но если вам нужно одно предположение, вы можете написать просто:

 NetworkUtils.builder().create(BaseRequest::class.java)
 

без какого-либо оператора diamond

Комментарии:

1. Итак, модернизация требует, чтобы вы возвращали тип? Я предполагаю, что Iv скорее использовал JsonElement и сериализовал или преобразовал из json в class или model где-нибудь в моем обратном вызове.