У вас есть кое-что, что я не совсем понимаю (что может быть ошибкой). В настоящее время не имеет смысла, что у вас есть currentCall
типа Call<*>
и общий метод add
, потому что вы никак не можете установить provider
для currentCall
.
Эта проблема может быть решена, если вы также сделаете Main
универсальным:
class Main<T> {
Затем вы можете безопасно удалить общий параметр из add
:
fun add(provider: Provider<T>){}
И, наконец, вы можете заменить звездную проекцию currentCall
на параметр типа generic
T
:
private var currentCall: Call<T>? = null
Что оставляет вас с классом вроде:
class Main<T> {
private var currentCall: Call<T>? = null
fun add(provider: Provider<T>){}
fun onStart() {
currentCall?.provider()?.enqueue { result ->
currentCall?.refresh(result)
}
}
}
Это работает, потому что вы явно указываете компилятору, что каждый тип, который вы используете в Main
, должен быть как-то связан с T
.