2017-11-23 16 views
0

私はKotlinを使用している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]!! 
} 

問題がHashMapstylesonCreate方法で初期化してしまうことがありますが、私はのいくつかにアクセスしたいときメソッドgetProperyHashMapからの値は空です。

いくつかのテストを行うと、getPropertyHashMapを初期化すると、ハッシュは初期化されたままであることが確認できました。

+0

この行は、 'Log.eがあるため、'、サイズとして1を印刷する必要があります(、this.styles.size.toString()は、「ハッシュサイズは3である」)あなたのキーは等しいです... – crgarridos

+0

sure @crgarridosコピー貼り付けの問題でした。それが修正されました。ありがとう –

+0

SomeHeritanceメインコードなしでそれを理解することは非常に難しいです。あなたは必ずonCreateより前にgetPropertyを呼び出しています – crgarridos

答えて

1

あなたのonCreateのようなものは、起動時に呼び出されません。あなたがそれにアクセスする前にマップに入れた値を持っていることを確認することができます

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

その方法:initブロック内でごMapの初期化を入れてください。

nullの値をgetPropertyに正しく入力してください。代わりに!!のあなたは、例外をスローする可能性:

fun getProperty(someProp: String): String 
     = styles[someProp] ?: throw IllegalArgumentException() 
+0

' onCreate'関数の 'Logs'が出力されていることが分かります。 –

関連する問題