Почему это невозможно?

Объявление свойства верхнего уровня без использования метода поздней инициализации и присвоение значения этой переменной в OnCreate(Bundle?)..

class MainActivity : AppCompatActivity() {

private var variable : Int

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    
    variable = 10
}
}
0
Boyapati Sandeep 4 Фев 2022 в 05:26
Что вы ожидаете, если вы получите доступ к variable до запуска onCreate?
 – 
Tyler V
4 Фев 2022 в 06:19
2
Ключевое слово lateinit позволяет избежать инициализации свойства при создании объекта. Если на ваше свойство ссылаются до инициализации, Kotlin выдает UninitializedPropertyAccessException , поэтому не забудьте инициализировать свое свойство как можно скорее. Если вы не хотите использовать lateinit, используйте private var variable : Int = 0
 – 
Bhavik Kalsariya
4 Фев 2022 в 08:36

2 ответа

Вы можете это сделать, но тогда вам нужен блок инициализации

class MainActivity : AppCompatActivity() {

private var variable : Int

init {
        variable=10
    }

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    
    variable = 10
}
}
0
Siddarth Jain 4 Фев 2022 в 07:53

Прежде всего, вы должны знать, что в Kotlin, когда мы объявляем переменную, мы должны инициализировать ее со значением или нам нужно присвоить null.

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

Но что вы хотите объявить переменной без lateinit?

Затем придет ключевое слово lazy, которое изменит правила игры.

Но есть один недостаток: Каждое ленивое свойство является свойством val (неизменяемым) и не может быть изменено после назначения.

Поэтому есть определенное условие, что ваше значение является фиксированным, и вы не хотите его менять, используя ключевое слово lazy.

В противном случае вам следует инициализировать любое значение по умолчанию без использования ключевого слова lateinit.

Например, private var number : Int = 0 или private var name : String = "" и вы также можете изменить его в onCreate().

0
Pratik Fagadiya 4 Фев 2022 в 08:51