Я работаю над проектом Android, используя Kotlin. У меня есть этот код:
val foo = FooClass(this) var colorRunning = FooClass.getProperty("myproperty")
и класс FooClass
:
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]!! }
Проблема в том, что styles
HashMap
инициализируются в методе onCreate
, но когда я хочу получить доступ к некоторым значениям из метода getPropery
HashMap
пуст.
Сделав несколько тестов, я мог проверить, что если я инициализирую HashMap
по методу getProperty
хэш останется инициализированным.
Кажется, что ваш onCreate
не вызывается при запуске. Поместите init своей Map
внутри блока init
:
init { with(styles){ put("a","a") put("b","a") put("c","a") } }
Таким образом, вы можете быть уверены, что значения будут помещены на карту, прежде чем обращаться к ней.
Также убедитесь, что правильно передали null
значения в свой getProperty
. Вместо !!
вы можете выбросить исключение:
fun getProperty(someProp: String): String = styles[someProp] ?: throw IllegalArgumentException()