¿Cuál es el lugar correcto para inicializar las variables de class en kotlin?

A: inicializa la variable de class en el bloque de inicio

private class ViewHolder(view: View) { val menuImg: ImageView val txtMenu: TextView init { menuImg = view.find(R.id.menuImg) txtMenu = view.find(R.id.txtMenu) } } 

B: inicializar variable de class directa en bloque de class

  private class ViewHolder(view: View) { val menuImg: ImageView = view.find(R.id.menuImg) val txtMenu: TextView = view.find(R.id.txtMenu) } 

¿Qué diferencia entre dos códigos y por qué?

No hay diferencia en la ejecución de esas opciones A y B: inicializadores de propiedad (asignando inmediatamente un valor) y bloques de inicializador (usando el bloque init). Pero para inicializaciones simples como su código, es común usar el inicializador de properties – opción B en su caso.

Pero tenga en count el order de ejecución de los inicializadores si usa ambas versiones en su código.

Citando de este artículo :

En primer lugar, se evalúan los arguments de constructor pnetworkingeterminados, comenzando con el argumento al constructor al que llama directamente, seguido de arguments a cualquier constructor delegado. A continuación, los inicializadores (inicializadores de propiedad y bloques init) se ejecutan en el order en que se definen en la class, de arriba hacia abajo . Finalmente, los constructores se ejecutan, comenzando con el constructor primario y moviéndose hacia afuera a través de constructores delegates hasta que se ejecuta el constructor que usted llamó.

  • Referencia no resuelta de Kotlin: println de gradle en la CLI
  • ¿Cómo hacer AppBar universal con Anko DSL?
  • Cómo implementar el repository de interfaz en otro module de proyecto en AndroidStudio usando Dagger2 y Kotlin
  • ¿Cómo analizar xml en la encoding de la aplicación Android?
  • Usando @ Component.Builder con parameters de constructor
  • Jackson no puede cargar types JDK7 en Android
  • Forma de configurar las properties de PrimaryStage o Scene en TornadoFX
  • ¿Cuál es la mejor práctica para crear un componente de IU personalizado en tornadofx?
  • Cómo importar packages Java en Kotlin Native
  • Aplicación de Android sin classs?
  • Kotlin + Dagger - Inyectar map para ViewModel fábrica