Lint将Kotlin MutableMap.forEach()视为java.util.Map.forEach()

Cha*_*har 5 java collections android kotlin

我在Android项目中使用Kotlin的MutableMap。并尝试对每个项目执行一些操作。这是我的代码。

private val uris: MutableMap<String, Uri> = mutableMapOf()
// ... Fill the items here ...
uris.forEach {
    val ref = FirebaseFirestore.getInstanse().reference
    uploadFile(ref, it.value)
}
Run Code Online (Sandbox Code Playgroud)

一切都在运行时一切正常,但是我的CI构建失败,并出现以下lint错误:

MyActivity.kt:142: Error: Call requires API level 24 (current min is 16): java.util.Map#forEach [NewApi]
              uris.forEach {
                   ~~~~~~~
Run Code Online (Sandbox Code Playgroud)

我知道在最小sdk为24之前我们无法将JDK-8的Map用于Android项目。但是为什么lint将其视为JDK-8的Map?

有关更多信息,我尝试从AS的Kotlin Bytecode选项中获取Java代码,并发现forEach已按预期被while循环和迭代器替代。

那么可能是什么原因以及如何解决这个问题?任何线索将不胜感激。

vod*_*dan 8

上有两个重载foreachMap

Kotlin一:

uris.forEach { (key, value) -> // Do some Action }
Run Code Online (Sandbox Code Playgroud)

Java8之一:

uris.forEach { key, value -> // Do some Action }
Run Code Online (Sandbox Code Playgroud)

令人困惑,不是吗?

  • 我正在使用uris.forEach(action:(Map.Entry &lt;K,V&gt;)-&gt; Unit)一个 (2认同)