La variable de anulación crea un NPE cuando se usa una variable en la initialization en la superclass

Digamos que tenemos la siguiente configuration:

open class Foo(open val img: Image) { val use = img.graphics } class Bar(override val img: BuffenetworkingImage) : Foo(img) 

En la initialization, el uso de img.width crea un NPE. Lo que creo que es el problema, es que aparentemente, a pesar de que img se pasa en el constructor de Foo directamente en Bar, cuando se usa en Foo no lo señala, sino que apunta a la variable anulada en la class Bar. ¿Cómo puedo evitar esto?

Este comportamiento es causado por el hecho de que el getter de img se anula y devuelve el valor de un campo diferente (ya que Bar anula img con un tipo diferente, se requiere crear un campo adicional de tipo BuffenetworkingImage ). El constructor Foo se ejecuta antes de que ese campo se asigne en Bar .

En general, debe evitar el uso de miembros abiertos en la lógica de initialization de sus classs, ya que pueden anularse en las subclasss y pueden depender de algún estado que, tras el time de initialization de la superclass, aún no se haya inicializado correctamente.

Para su caso particular, haga img en el constructor Foo un parámetro simple y use el parámetro explícitamente:

 open class Foo(img: Image) { open val img = img val use = img.graphics } 
  • Nuevo fragment de Kotlin de Recyclerview
  • ¿Por qué no está vacío en las collections de Kotlin una propiedad?
  • Usando RxJava con Handler, restablece Message.what value
  • Herencia en Kotlin
  • Kotlin: Declaración a Lambda
  • Retrofit2 Añadir cadena adicional al object Body
  • cómo establecer el color de RecyclerView.ViewHolder en BroadcastReceiver.onReceive?
  • TextColor está cambiando a uno incorrecto
  • La class Kotlin no obtiene su valor boolean de firebase
  • ¿Por qué es imposible utilizar las references de methods para las funciones `suspender` en Kotlin?
  • Excepción fatal: java.lang.RuntimeException con Klaxon json Kotlin Library