我在使用Kotlin的Android项目中工作。我有这段代码:
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]!!
}
问题是HashMap
styles
在onCreate
方法中初始化了,但是当我想从方法getPropery
访问某些值时HashMap
是空的。
进行一些测试,我可以检查如果我在方法HashMap
上初始化getProperty
,则哈希值仍然被初始化。
答案 0 :(得分:1)
似乎您的onCreate
未在启动时调用。将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()