Подтвердить что ты не робот

Почему универсальное типизированное свойство обнуляется?

Я пытаюсь создать параметризованный класс с свойством 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?, я смущен, почему это так.

4b9b3361

Ответ 1

"Верхняя граница по умолчанию (если она не указана) Any?" (http://kotlinlang.org/docs/reference/generics.html#generic-constraints)

Другими словами, когда вы используете T, Котлин предполагает, что это может быть любой тип, будь то примитивный, объект или нулевая ссылка.

TL; DR;

, чтобы исправить добавить верхний тип:

class Test<T: Any> { ... }