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 でした。

コメントを残す

メールアドレスが公開されることはありません。