"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?" 
  • ¿Por qué Gradle construye el código fuente de Kotlin haciendo una pausa de ~ 3 segundos "forzando System.gc ()"?
  • ¿Cómo get una class de matriz primitiva multidimensional en kotlin?
  • ¿Puedo crear un método de extensión Kotlin para agregar una suscripción rxJava a una suscripción compuesta?
  • Excepción UninfernetworkingParameterTypeConstructor durante la compilation cuando los parameters generics no se especifican explícitamente
  • Argumentos pnetworkingeterminados de Kotlin en error de interfaz?
  • ¿Por qué algunos methods de configuration de Java se convierten automáticamente en properties de Kotlin pero otros no?
  • Delegación de propiedad horneada por map mutable
  • Recolectando artículos con las transmisiones de Kotlin
  • Convierta la aplicación de Android Kotlin utilizando Project Astoria
  • IntelliJ: error de Kotlin causa parpadeo del mouse y errores en el código
  • La propiedad debe inicializarse o ser abstracta