Как написать функцию расширения с вложенными обобщениями? - PullRequest
0 голосов
/ 19 июня 2019

У меня есть функция расширения для одного класса:

fun <T: Response<BaseResponse>> Single<T>.checkResponse(): Single<BaseResponse> {
    return this.map { some code }
}

И я пытаюсь использовать его следующим образом:

fun sign(body: Map<String, String>): Single<SignResponse> {
    return service.sign(body).checkResponse().map { it }
}

Подпись службы подписи:

@POST(Urls.SIGN)
fun sign(@Body body: Map<String, String>): Single<Response<SignResponse>>

SignResponseнаследует BaseResponse, очевидно

Ответ - retrofit2.response

И у меня есть ошибка:

Type parameter bound for T in fun <T : Response<BaseResponse>> Single<T>.checkResponse(): Single<BaseResponse> is not satisfied: inferred type Response<SignResponse> is not a subtype of Response<BaseResponse>

Как мне нужно написать функцию расширения, чтобы сообщить компилятору, что SingleОтвет, который имеет тип, унаследованный от BaseResponse

1 Ответ

0 голосов
/ 19 июня 2019

Вы можете попробовать что-то вроде этого:

fun <R: BaseResponse, T: Response<R>> Single<T>.checkResponse(): Single<R>
...