初始化后属性被删除 - kotlin

时间:2017-11-23 09:30:57

标签: android hash kotlin

我在使用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 stylesonCreate方法中初始化了,但是当我想从方法getPropery访问某些值时HashMap是空的。

进行一些测试,我可以检查如果我在方法HashMap上初始化getProperty,则哈希值仍然被初始化。

1 个答案:

答案 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()