El atributo se borra después de la initialization – kotlin

Estoy trabajando en un proyecto de Android usando Kotlin. Tengo este pedazo de código:

val foo = FooClass(this) var colorRunning = FooClass.getProperty("myproperty") 

y la class FooClass es:

 class FooClass(val context: Context) : SomeHeritance{ private val styles: HashMap<String, String> = hashMapOf() override fun onCreate(context: Context?) { Log.e("Hash is empty here", this.styles.size.toString()) this.styles.put("a","a") this.styles.put("b","a") this.styles.put("c","a") Log.e("Hash is size is 3", this.styles.size.toString()) } override fun getProperty(someProp: String) { Log.e("Hash is size is 0", this.styles.size.toString()) //I don't understand why return styles[someProp]!! } 

El problema es que los styles HashMap se inicializan en el método onCreate , pero cuando quiero acceder a algunos de los valores del método getPropery el HashMap está vacío.

Al hacer algunas testings, pude comprobar que si inicializo HashMap en el método getProperty el hash permanece inicializado.

Parece que tu onCreate no se llama al inicio. Pon el init de tu Map dentro de un bloque init :

 init { with(styles){ put("a","a") put("b","a") put("c","a") } } 

De esa manera, puede estar seguro de tener los valores puestos en el map antes de acceder a él.

También asegúrese de tener valores null en su getProperty correctamente. En lugar de !! podrías lanzar una exception:

 fun getProperty(someProp: String): String = styles[someProp] ?: throw IllegalArgumentException() 
  • Cómo usar el envoltorio MailChimp escrito por Kotlin en el Proyecto Java
  • Diferencia entre cualquier tipo y generics en Kotlin
  • En Kotlin Lenguaje de progtwigción importancia de varargs en términos de usos
  • TornadoFX: permite copyr un elemento de una vista de list al portapapeles
  • Las declaraciones de object de Powermockito spy y Kotlin: No se puede subclasificar la class final
  • Soporte de macros en herramientas
  • Llamar a un RxJava Single In Kotlin Lambda
  • Map.mapTo a otro map
  • Spring no puede manejar el método que devuelve la class Kotlin interna genérica
  • El nombre del file, el nombre del directory o la syntax de la label del volumen son incorrectos - Kotlin - Maven
  • Regex Match en una string