Как определить Kotlin, что проекции звезд представляют один и тот же параметр типа - PullRequest
0 голосов
/ 26 мая 2020

Я столкнулся со следующей проблемой: Предположим, что у нас есть class A<T> и class B<T>, и мы можем откуда-то получить A<*> и B<*>, например, у нас есть интерфейс только для чтения, например:

interface ABProvider {
    fun provideA(): A<*>
    fun provideB(): B<*>
}

Тогда мы знаем по некоторым внутренним логам c, что этот провайдер всегда возвращает A's и B's с одним и тем же параметром типа в звездных проекциях. Более формально мы знаем, что существует некая T такая, что provideA() возвращает A<T> и provideB() возвращает B<T> одновременно.

И затем мы хотим иметь возможность делать такие вещи, как это:

fun <T> doSomething(a: A<T>, b: B<T>) {...}

val a = provider.provideA()
val b = provider.provideB()
doSomething(a, b) // <- here is the problem

Так есть ли способ решить эту проблему? Я пытался сделать что-то вроде этого:

fun <T> cast(a: A<T>, b: B<*>) = a to (b as B<T>)

, но он не работает, он говорит: «Невозможно определить параметр типа T».

Заранее спасибо.

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