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 .