Kotlin 扩展函数突然需要 api 级别 24
Kotlin Extension Functions suddenly require api level 24
我刚刚注意到这个 lint 错误:
Call requires API Level 24 (current min is 19) java.util.map#foreach
当我在 Kotlin 的 MutableMap 上使用扩展函数 forEach 时。
当我写这行时这并没有发生,但它现在就在那里。
我在我的另一台机器上没有看到这个错误。
您使用的不是kotlin.collections.MutableMap.forEach
。
你用的好像是Map.forEach
in Java 8.
参考这篇文章:
http://blog.danlew.net/2017/03/16/kotlin-puzzler-whose-line-is-it-anyways/
这似乎是一个常见的错误。
Java 8 从 Android API 级别 24 得到很好的支持。
简而言之,不要像map.forEach { t, u -> Log.i("tag", t + u) }
那样使用forEach
(这是使用Java 8 API,它不适用于Android API 等级 <= 23).
像 map.forEach { (t, u) -> Log.i("tag", t + u) }
一样使用它(这是使用 Kotlin API)。
(不是两个参数。只有一个参数是一对。)
Map.forEach 在 Java 8 中得到支持,在 Android 中的支持从 API 24
开始
这也发生在列表中,即使我正在使用我需要使用:
list.iterator().forEach {}
关键是在 forEach 之前使用 iterator()
。
运行 因为提供的依赖项映射是 Java 8 映射,所以 forEach
被检测为 Java 8 版本,无论如何我将我的参数分组在 lambda 签名中(one, two ->
与 (one, two) ->
)。我能找到的最佳解决方案是使用带有别名 (import kotlin.collections.forEach as kForEach
) 的显式导入。别名使优化导入不会删除显式导入。
我刚刚注意到这个 lint 错误:
Call requires API Level 24 (current min is 19) java.util.map#foreach
当我在 Kotlin 的 MutableMap 上使用扩展函数 forEach 时。 当我写这行时这并没有发生,但它现在就在那里。 我在我的另一台机器上没有看到这个错误。
您使用的不是kotlin.collections.MutableMap.forEach
。
你用的好像是Map.forEach
in Java 8.
参考这篇文章: http://blog.danlew.net/2017/03/16/kotlin-puzzler-whose-line-is-it-anyways/
这似乎是一个常见的错误。
Java 8 从 Android API 级别 24 得到很好的支持。
简而言之,不要像map.forEach { t, u -> Log.i("tag", t + u) }
那样使用forEach
(这是使用Java 8 API,它不适用于Android API 等级 <= 23).
像 map.forEach { (t, u) -> Log.i("tag", t + u) }
一样使用它(这是使用 Kotlin API)。
(不是两个参数。只有一个参数是一对。)
Map.forEach 在 Java 8 中得到支持,在 Android 中的支持从 API 24
开始这也发生在列表中,即使我正在使用我需要使用:
list.iterator().forEach {}
关键是在 forEach 之前使用 iterator()
。
运行 因为提供的依赖项映射是 Java 8 映射,所以 forEach
被检测为 Java 8 版本,无论如何我将我的参数分组在 lambda 签名中(one, two ->
与 (one, two) ->
)。我能找到的最佳解决方案是使用带有别名 (import kotlin.collections.forEach as kForEach
) 的显式导入。别名使优化导入不会删除显式导入。