kotlin の Map の forEach を古い Android で使う
forEach の書き方によって古い Android 端末(KitKat)でエラーが出たので、対処のメモです。
括弧「()」が重要
以下の様なコードを書くと、実行されるコードは Java8 の Map になり、APIレベルの24からのサポートになるそうです。fun hoge(map: Map<String, Long>) {
map.forEach { key, value ->
Log.d("HOGE", "key: $key -> value: $value")
}
}
APIレベル19でも動かすためには、次のように記述します。
fun hoge(map: Map<String, Long>) {
map.forEach { (key, value) ->
Log.d("HOGE", "key: $key -> value: $value")
}
}
ラムダ式のところを括弧「()」でくるんでいるところがミソで、2引数ではなく1引数にします。
これによりAPIレベル19でもサポートしているバイトコードになるみたいです。
詳細は、下記の stackoverflow の記事を参照ください。
ちなみに、私の場合、発生した例外は java.lang.NoClassDefFoundError で、場所は forEach のラムダ式の箇所 ExternalSyntheticLambda6 でした。
