"Lateinit" o "by perezoso" cuando se define global android.widget var / val

Al definir una variable global de android.widget , por ejemplo, TextView , ¿es preferible usar lateinit o by lazy ? Inicialmente pensé que sería preferible usar by lazy porque es inmutable, pero no estoy del todo seguro.

by lazy ejemplo:

 class MainActivity: AppCompatActivity() { val helloWorldTextView by lazy { findViewById(R.id.helloWorldTextView) as TextView } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) updateTextView(helloWorldTextView) } fun updateTextView(tv: TextView?) { tv?.setText("Hello?") } } 

ejemplo lateinit :

 class MainActivity: AppCompatActivity() { lateinit var helloWorldTextView: TextView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) helloWorldTextView = findViewById(R.id.helloWorldTextView) as TextView updateTextView(helloWorldTextView) } fun updateTextView(tv: TextView?) { tv?.setText("Hello?") } } 

¿Hay algún beneficio de usar uno sobre el otro al definir un var / val global de android.widget ? ¿Hay algún inconveniente con el uso by lazy para definir un android.widget val? ¿La decisión se basa solo en si desea un valor mutable o inmutable?

Hay una trampa con by lazy . La propiedad del widget sería de solo lectura y, por lo tanto, técnicamente definitiva (en términos de Java). Pero no hay garantía documentada de que onCreate() se onCreate() solo una vez para una instancia. También findViewById() podría devolver null .

Por lo lateinit es preferible utilizar lateinit y obtendrá una exception para informarle si val se utilizó antes de onCreate() .

Una tercera posibilidad serían las properties sintéticas de Android . Entonces no necesita preocuparse por las variables en absoluto.

 import kotlinx.android.synthetic.main.activity_main.* helloWorldTextView.text = "Hello?" 
  • utilizando compile "org.jetbrains.kotlin: kotlin-stdlib-jre7: $ kotlin_version" give Error
  • ¿Cómo configurar un proyecto de eclipse para usar Kotlin con JPA / Hibernate?
  • ¿Qué representa una matriz de nulls en Kotlin?
  • ¿Qué tipo de time de compilation debo asignar para recibir un valor de retorno de java.util.Map <TextAttribute,?>
  • Soporte de macros en herramientas
  • ¿Hay alguna manera de hacer un cajón con tres estados?
  • ¿Cómo cambia mutableMap <String, Any?> El valor a var cuando uso delegate en Kotlin?
  • Desplazamiento suave en JavaFX TableView
  • ¿Cómo puedo filtrar un valor de una list de arrays en Kotlin?
  • La combinación de cuadros de OpenCV solo da como resultado azul
  • "" Java "" no se reconoce como un command interno o externo, progtwig o file por lotes. en Kotlin