Вы должны использовать:
val myClass: AbsClass<out Any> = MyClass()` or `val myClass: AbsClass<in Nothing> = MyClass()
Ключевое слово out
означает, что вы хотите, чтобы любой подтип мог быть присвоен супертипу.MyModel
можно присвоить любому, так что все в порядке.
Ключевое слово in
означает, что вы ожидаете, что любой подтип может быть назначен подтипу (в нашем случае Nothing), поэтому вы можете использовать свой MyModel
, потому чтоэто супертип Nothing
.
Таким образом, без предоставления какой-либо информации ожидаемого типа (вы можете указать, например, AbsClass<T : MyAbstractModel>
), на мой взгляд, действительно мало возможностей без приведения или отражения.
Это дисперсия типа, и это одна из самых сложных идей в ООП.Подробнее вы можете прочитать здесь: https://kotlinlang.org/docs/reference/generics.html#variance