Почему это невозможно?
Объявление свойства верхнего уровня без использования метода поздней инициализации и присвоение значения этой переменной в OnCreate(Bundle?)..
class MainActivity : AppCompatActivity() {
private var variable : Int
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
variable = 10
}
}
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
}
}
Прежде всего, вы должны знать, что в Kotlin, когда мы объявляем переменную, мы должны инициализировать ее со значением или нам нужно присвоить null.
Но если мы не хотим инициализировать переменную нулевым или любым значением. Скорее мы хотим инициализировать его в будущем допустимым значением, тогда мы должны использовать lateinit. На самом деле это обещание компилятору, что значение будет инициализировано в будущем..
Но что вы хотите объявить переменной без lateinit
?
Затем придет ключевое слово lazy
, которое изменит правила игры.
Но есть один недостаток: Каждое ленивое свойство является свойством val (неизменяемым) и не может быть изменено после назначения.
Поэтому есть определенное условие, что ваше значение является фиксированным, и вы не хотите его менять, используя ключевое слово lazy.
В противном случае вам следует инициализировать любое значение по умолчанию без использования ключевого слова lateinit.
Например, private var number : Int = 0
или private var name : String = ""
и вы также можете изменить его в onCreate()
.
Новые вопросы
android
Android - это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфоны, планшеты, автомобили, телевизоры, одежда, стекло, IoT). Для тем, связанных с Android, используйте специальные теги Android, такие как android-intent, android-activity, android-адаптер и т. Д. Для вопросов, не связанных с разработкой или программированием, но связанных с платформой Android, используйте эту ссылку: https: // android.stackexchange.com .
variable
до запускаonCreate
?lateinit
позволяет избежать инициализации свойства при создании объекта. Если на ваше свойство ссылаются до инициализации, Kotlin выдаетUninitializedPropertyAccessException
, поэтому не забудьте инициализировать свое свойство как можно скорее. Если вы не хотите использоватьlateinit
, используйтеprivate var variable : Int = 0