首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lint认为Kotlin MutableMap.forEach()是java.util.Map.forEach()

Lint认为Kotlin MutableMap.forEach()是java.util.Map.forEach()
EN

Stack Overflow用户
提问于 2018-01-25 07:06:33
回答 3查看 2.4K关注 0票数 7

我在我的安卓项目中使用Kotlin的MutableMap。试着在每件事上做些动作。这是我的密码。

代码语言:javascript
复制
private val uris: MutableMap<String, Uri> = mutableMapOf()
// ... Fill the items here ...
uris.forEach {
    val ref = FirebaseFirestore.getInstanse().reference
    uploadFile(ref, it.value)
}

在运行时,一切都很好,但是我的CI构建失败了,下面是lint错误:

代码语言:javascript
复制
MyActivity.kt:142: Error: Call requires API level 24 (current min is 16): java.util.Map#forEach [NewApi]
              uris.forEach {
                   ~~~~~~~

我知道,在min 24岁之前,我们不能将JDK-8的Map用于Android项目。但是为什么林特认为它是JDK-8的地图呢?

为了了解更多信息,我尝试从AS中的Kotlin字节码选项中获取Java代码,并发现forEach按照预期被替换为while循环和迭代器。

那么,什么是理性,如何解决这一问题呢?任何线索都将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-01-25 07:46:49

foreach上有两个重载的Map

科特林一号:

代码语言:javascript
复制
uris.forEach { (key, value) -> // Do some Action }

Java8 one:

代码语言:javascript
复制
uris.forEach { key, value -> // Do some Action }

令人困惑,不是吗?

票数 11
EN

Stack Overflow用户

发布于 2018-01-25 07:39:07

我认为这是一个重要的问题。也许您使用了JDK 8的Map.forEach

你必须使用kotlin.collections.MutableMap.forEach

您也可以查看这个博客:

http://blog.danlew.net/2017/03/16/kotlin-puzzler-whose-line-is-it-anyways/

票数 2
EN

Stack Overflow用户

发布于 2018-01-25 07:33:31

你确定你用的是Kotlin的forEach吗?因为有两个forEach,一个来自Map.Entry作为参数的Kotlin,另一个来自带有两个参数的Java : key和value。请出示你的代码的完整版本。如果使用没有参数的forEach,就意味着使用Kotlin (您有it隐式参数)。

如果您使用Kotlin forEach,但仍有此警告,则应向Android问题跟踪器报告此问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48437358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档