Constructor de objects y Delegates.notNull

object WalletConfig { init { fill(HashMap<String, String>()) } var clientUrl: String by Delegates.notNull() private set fun fill(settingMap: Map<String, String>) { try { clientUrl = settingMap["URL_CLIENT"] ?: "" } catch(ex:Exception) { } } } 

throw ex: fill: carga el file de configuration 'wallet.config': java.lang.NullPointerException en ru.WalletConfig.setClientUrl (WalletConfig.kt)

El problema está causado por el bloque init y el inicializador de propiedad init orderados. Como se indica en la respuesta sobre la semántica de initialization de class . El bloque de init no es el constructor; su código está incluido en el constructor primario.

El siguiente ejemplo:

 class OrderOfInits { constructor() { println("constructor") } init { println("A") } init { println("B") } init { println("C") } } val a = OrderOfInits() 

Imprimiría:

 A B C constructor 

La initialization de delegates de propiedad también es parte del constructor primario. Su order de initialization en constructor refleja el order en el que fueron declarados. En otras palabras, el bloque de initialization init { fill(...) } invoca el setter clientUrl que a su vez intenta llamar al método de instancia Delegates.notNull() . Sin embargo, el campo de instancia que contiene Delegates.notNull() aún no se ha establecido, por lo tanto, NPE.

Para solucionar el problema, solo necesita reorderarlos de la siguiente manera:

 object WalletConfig { var clientUrl: String by Delegates.notNull() private set init { fill(HashMap<String, String>()) } ... } 
  • Error al ejecutar el process de java con la class principal com.google.devtools.build.android.desugar.Desugar
  • No se pudieron encontrar las classs de Kotlin en el module de características de otro module
  • Sugar ORM, ¿Listar todo en Kotlin? Java funciona, pero Kotlin no
  • No se puede ejecutar kotlin coroutine (no existe tal exception de método
  • ¿Cómo se verifica el tipo genérico en Kotlin?
  • Anko 0.8 - reference de lparams no resuelta
  • Fusionar observables dependientes
  • "No se pudo iniciar la actividad" en una testing de café expreso
  • ClassNotFoundException en sabor personalizado usando kotlin
  • Cómo declarar varias properties en una línea
  • ¿Por qué Kotlin necesita una syntax de reference de function?