badazim’s blog

素人がプログラミングを勉強しながら覚え書きを書きます

kotlinにおけるArrayのNullチェック

kotlinのArrayのNullチェックで躓いたのですが、とりあえず解決したので、メモ。。

 

Array<String>? のnull許容の意味がわからず、これでコンパイルエラーになっていた。

private fun arraytest(testArray:Array<String>?){
for(i in 0..5){
val ELEMENT = testArray[i]
if (ELEMENT != null) {
val element:String = ELEMENT
}
}
}

→Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type Array<String>?

 

Array<String>? の場合は配列の中身ではなく、配列自体をnull判定すれば扱えるみたい。

private fun arraytest(testArray:Array<String>?){
if (testArray != null){
for(i in 0..5){
val element:String = testArray[i]
}
}
}

コンパイルは通った。

 

ちなみにnull許容型 Array<String?>の場合も勘違いしていた。配列に添字を付けてnull判定しても、スマートキャストされない模様。。

private fun arraytest(testArray:Array<String?>){
for(i in 0..5){
if (testArray[i] != null) {
val element:String = testArray[i]
}
}
}

→Type mismatch: inferred type is String? but String was expected

 

以下の書き方ならコンパイルが通る。

private fun arraytest(testArray:Array<String?>){
for(i in 0..5){
val ELEMENT = testArray[i]
if (ELEMENT != null) {
val element:String = ELEMENT
}
}
}