Несоответствие типов в функции расширения Kotlin - PullRequest
0 голосов
/ 09 октября 2019

У меня есть это простое расширение Kotlin для Wrapper. Я пытаюсь создать Output<T> (запечатанный класс) из Wrapper<T>, но получаю несоответствие типов ошибка

Здесь я добавляю весь необходимый код

sealed class Output<T> {
    data class WantedOutput<T>(val value: T): Output<T>()
    data class UnwantedOutput<T>(val error: Throwable) : Output<T>()
}

interface Data {
    val id: String
    val name: String?
    val age: Int?
}

data class ResponseData(
    override val id: String,
    override val name: String?,
    override val age: Int?
) : Data

data class Wrapper<T>(val result: T)

fun <T> Wrapper<T>.convert() : Output<T> {
    return Output.WantedOutput(result)
}

interface Provider {
    fun getData(): Wrapper<ResponseData> // THIS MUST BE THE IMPLEMENTATION
}

class Test {

    // THE RETURN TYPE MUST BE THE INTERFACE
    fun test(): Output<Data> {
        val wrapper = Wrapper(ResponseData("ID", "ISAAC", 26))
        return Output.WantedOutput(wrapper.result)
    }

    fun test(provider: Provider): Output<Data> {
        return provider.getData().convert() // THIS FAILS
    }
}

Как сделать так, чтобы это расширение соответствовало правильному типу? Проблема в том, что Wrapper<T> не является (точно) того же типа Output<T>. T from Output - это интерфейс, а T from Wrapper - это реализация. Можно ли сказать системе типов принять это?

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...