Необходимо указать, что параметр универсального типа T
расширяет тип Any
.Если не указано иное, компилятор предполагает, что допускается также значение NULL Any?
.Но ваши реквизиты допускают только те типы, которые не допускают обнуления.И вам нужно указать out
как тип проекции для вашего списка configProps
:
private val configProps = mutableListOf<GameConfigProp<out Any>>()
fun <T : Any> addProp(name: String, value: T) : GameConfigProp<T>{
val p = GameConfigProp(name, value)
configProps.add(p)
return p
}
Теперь он будет скомпилирован.Но учтите, что все методы, для которых требуется T со стороны in
- GameConfigProp
, не будут доступны для элементов вашего списка configProps
, например, configProps[1].value = ...
не скомпилирует