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>()) } ... } 
  • ¿Cómo hacer una request de API en Kotlin?
  • reference no resuelta: text - Android Studio + Kotlin (findViewById fault?)
  • ¿Cómo puede la class de un simulacro no ser igual a su class Java en Kotlin?
  • alerta abiertaDialog en kotlin, cómo configurar ambos posts con botones de radio
  • Spring Boot con la aplicación Single Page en AWS Elastic Beanstalk requiere una networkingirección adicional
  • Kapt + LoganSquare no funciona bien en el mapeo
  • Aparece el error "No coinciden los types" cuando uso una function como parámetro en Kotlin.
  • Modificar "esto" en la function de extensión
  • Cómo hacer un generador para una class de datos de Kotlin con muchas properties inmutables
  • ControlsFX SpreadsheetView rowspan IndexOutOfBoundsException
  • Gson setDateFormat hace exception cuando la date es nula