Согласно документам, скажем, у вас есть класс
class Source<X>
, вы не можете сделать это
val source: Source<Any> = Source<String>()
, даже если String наследуется от Any.Это называется инвариантностью.Для поддержки этой функции вам придется использовать декларацию сайта Kotlin.Вам просто нужно добавить модификатор out к параметру типа X.
class Source<out X>
Подвох в том, что вы не можете использовать X ни в одном из методов класса Source, например:
class Source<out X> {
fun modifyX(x: X) {} //not allowed
}
Вы можете создать только X, т. Е. Установить тип возвращаемого значения для методов X