модификатор lateinit не допускается на свойства примитивного типа в Котлине

Я определяю как переменную экземпляра в kotlin и хочу инициализировать его onCreate метод activity .

 var count: Int override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) count.inc() } 

Здесь я получаю ошибку ниже переменной count.

Имущество должно быть инициализировано или быть абстрактным в Котлине

Ну, я прочитал этот поток. Имущество должно быть инициализировано или быть абстрактным и проверенным, но снова я получаю ошибку ниже.

модификатор lateinit не допускается при свойствах примитивного типа

 lateinit var count: Int override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) count.inc() } 

Есть ли способ сделать это в Kotlin ?

Существует несколько способов решения этой проблемы.

Вы можете инициализировать его значением по умолчанию (ei 0 или -1 или любым другим), а затем инициализировать его всякий раз, когда ваша логика говорит.

Или сообщите компилятору, что счетчик будет инициализирован позже в этом коде с помощью параметра Delegates.notNull check notNull .

 var count: Int by Delegates.notNull<Int>() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) //You can not call `Int.inc()` in onCreate()` function until `count` is initialised. //count.inc() // **initialise count** } 

И если вам нужно подсчитать значение по требованию (если нет необходимости инициализировать onCreate ), вы можете использовать lazy функцию. Используйте это только в том случае, если у вас есть интенсивная задача (некоторые вычисления / наложение макета и т. Д.), Которую вы хотите делать on demand , а не просто присваивать значение.

 var count:Int by lazy { // initialise } 

Теперь вы можете решить, что использовать.

Я надеюсь, что это помогает.

Нет причин оставлять его неинициализированным. Просто инициализируйте его до 0 или -1.

lateinit – для ненулевых ссылок на объекты, которые не могут быть легко инициализированы в определении тела класса.