Kotlin: la propiedad debe inicializarse o ser abstracta incluso si hay una function init ()

He convertido este código de Java a Kotlin con Android Studio 3.0

internal var background: Drawable internal var xMark: Drawable private fun init() { background = ColorDrawable(Color.RED) xMark = ContextCompat.getDrawable(this@Subscriptions_main, R.drawable.delete) } 

En la línea 1 y 2 recibo el error:

La propiedad debe inicializarse o ser abstracta

a pesar de que se va a inicializar en la function init.

Esta escribiendo:

 internal var background: Drawable? = null internal var xMark: Drawable? = null 

una solución viable y eficiente? ¿Hay alguna otra forma mejor?

Antes de usar lateinit , debes entender lo que eso significa.

Sus variables no se inicializan correctamente. Varias forms de resolver ese problema:

  • Inicializa las variables dentro del constructor o un bloque de init adecuado (no una function privada como la declaraste)
  • Inicialice las variables al mismo time que las declara
  • Inicializa las variables más tarde y deja que Kotlin sepa que (esta es la palabra key lateinit )

Esas 3 opciones no son equivalentes, y dependiendo de su código, las dos primeras pueden ser más apropiadas que la tercera.

lateinit hará que su aplicación se cuelgue si accede a las variables antes de que se hayan inicializado.

Los bloques de init no son funciones, solo elimina la parte de private fun y los paréntesis:

 internal var background: Drawable internal var xMark: Drawable init { background = ColorDrawable(Color.RED) xMark = ContextCompat.getDrawable(this@Subscriptions_main, R.drawable.delete) } 

Necesita la palabra key lateinit . Verifica los documentos .

  • ¿Cómo crear caching / versión caliente de rx.Single?
  • ¿Se puede utilizar javascript generado a partir de fonts de Kotlin en JVM?
  • Desasignando una variable en kotlin
  • Cómo crear una instancia de una class anónima que implementa una interfaz en Kotlin
  • Android Firebase auth: class de descriptor de module local para com.google.android.gms.crash y com.google.firebase.auth no encontrado
  • Kotlin 1.0.0-rc-1036 problemas con el procesamiento de annotations
  • ¿Cómo llamar a networkingucir en una matriz de Kotlin vacía?
  • ¿Es posible express kotlin 'con' método equivalente en Scala?
  • Puede tener un constructor vacío o un constructor cuyos parameters coincidan con los campos
  • Obteniendo la class actual
  • Definición recursiva de secuencia infinita en Kotlin