Управление объектами в рамках мероприятий, чтобы избежать использования Null

Одним из преимуществ использования Kotlin является его безопасность Null. Однако, когда я программировал приложения Android, используя это, я обнаружил, что мне нужно использовать null. При объявлении моих элементов пользовательского интерфейса, таких как TextViews и кнопки и т. Д. Мне нужно создать частные переменные, которые инициализируются для каждого объекта во время onCreate, но это означает, что мне нужно явно разрешить null для каждой ссылки. Этот вид побеждает одну из целей использования Котлина. Есть ли лучшее решение для создания экземпляров объектов пользовательского интерфейса в моих действиях в Android.

Вот как я это делаю сейчас.

var messageView: TextView? = null var firstNameView: EditText? = null var lastNameView: EditText? = null var ageView: EditText? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) messageView = findViewById<TextView>(R.id.message) firstNameView = findViewById<EditText>(R.id.firstName) lastNameView = findViewById<EditText>(R.id.lastName) ageView = findViewById<EditText>(R.id.age) findViewById<Button>(R.id.showMessage).setOnClickListener(this) findViewById<Button>(R.id.update).setOnClickListener(this) } 

Попытайтесь определить их как lateinit , вам нужно lateinit необходимость их обнуления, если вы можете гарантировать, что вы предоставите значения до их чтения.

 lateinit var messageView: TextView lateinit var firstNameView: EditText lateinit var lastNameView: EditText lateinit var ageView: EditText 

Из документации для lateinit :

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