Почему универсальное типизированное свойство обнуляется?
Я пытаюсь создать параметризованный класс с свойством lateinit
non-nullable для генерического типа:
class Test<T> {
private lateinit var t : T
private lateinit var s : String
}
Последнее разрешено, но первое - нет. Компилятор возвращает следующую ошибку:
Error:(7, 11) ''lateinit'' modifier is not allowed on nullable properties
Поскольку я не объявлял T?
, я смущен, почему это так.
Ответы
Ответ 1
"Верхняя граница по умолчанию (если она не указана) Any?
" (http://kotlinlang.org/docs/reference/generics.html#generic-constraints)
Другими словами, когда вы используете T
, Котлин предполагает, что это может быть любой тип, будь то примитивный, объект или нулевая ссылка.
TL; DR;
, чтобы исправить добавить верхний тип:
class Test<T: Any> { ... }