Kotlin扩展函数突然需要api level 24

Seb*_*ger 13 android kotlin kotlin-extension

我刚注意到这个lint错误:

调用需要API级别24(当前最小值为19)java.util.map#foreach

当我在Kotlin的MutableMap上使用扩展函数forEach时.当我写这条线时没有发生这种情况,但现在就在那里.我在其他机器上没有看到这个错误.

Nae*_*mul 39

你使用的不是kotlin.collections.MutableMap.forEach.

你正在使用的似乎是Map.forEach在Java 8中.

阅读这篇文章:http: //blog.danlew.net/2017/03/16/kotlin-puzzler-whose-line-is-it-anyways/

这似乎是一个常见的错误.

从Android API级别24开始,Java 8得到了很好的支持.

总之,不要使用喜欢map.forEach { t, u -> Log.i("tag", t + u) }.
用得像map.forEach { (t, u) -> Log.i("tag", t + u) }.
(不是两个参数.只有一个参数是一对.)

  • 这为我解决了它。MutableMap 上的 replace() 发生了同样的事情,所以我猜这是相同的原因 (2认同)
  • @IgorGanapolsky 通常,您将 Kotlin 与一些 Java 库一起使用,因此这些库的 Java 版本可能很重要。juMap.forEach 的两个参数版本是从 Java 8 开始,即 Android API 24 开始。 (2认同)

Jav*_*ier 5

这也会发生在列表中,即使我正在使用我需要使用:

list.iterator().forEach {}
Run Code Online (Sandbox Code Playgroud)

关键是iterator()在 forEach 之前使用。