Lint认为Kotlin MutableMap.forEach()是java.util.Map.forEach()
我在Android项目中使用Kotlin的MutableMap。 并试图做一些行动每个项目。 所以这里是我的代码。
private val uris: MutableMap = mutableMapOf() // ... Fill the items here ... uris.forEach { val ref = FirebaseFirestore.getInstanse().reference uploadFile(ref, it.value) }
在运行时,一切正常,但我的CI构建失败,下面的lint错误:
MyActivity.kt:142: Error: Call requires API level 24 (current min is 16): java.util.Map#forEach [NewApi] uris.forEach { ~~~~~~~
我知道在min sdk是24之前我们不能使用JDK-8的Map项目。但是为什么lint会把它看作是JDK-8的Map?
有关更多信息,我尝试从AS中的Kotlin Bytecode选项获取Java代码,并发现forEach按预期方式被替换为while循环和迭代器。
那么可能是什么原因以及如何解决呢? 任何主角将不胜感激。
我认为这是一个import问题。 也许你已经使用了JDK 8的Map.forEach 。
你必须使用kotlin.collections.MutableMap.forEach
你也可以查看这个博客:
http://blog.danlew.net/2017/03/16/kotlin-puzzler-whose-line-is-it-anyways/
Map
上有两个重载的foreach
:
科特林一:
uris.forEach { (key, value) -> // Do some Action }
Java8之一:
uris.forEach { key, value -> // Do some Action }
混乱,不是吗?
你确定从Kotlin使用forEach吗? 因为有两个forEach
,一个来自Kotlin, Map.Entry
作为参数,一个来自Java,带有两个参数:key和value。 请显示完整版本的代码。 如果你使用forEach没有参数,这意味着你使用Kotlin一个(你有it
隐含的参数)。
如果您使用Kotlin forEach并仍然存在此警告,则应将此问题报告给Android问题跟踪器
- 无法让dokka在gradle / android项目上生成kotlin文档
- 在高阶函数中调用具有参数/ s的lambda
- Kotlin:ProGuard擦除属性属性
- 当我添加将RealmObject扩展到我的项目的ChatInformation kotlin类时,无法建立项目,错误在哪里?
- 是杰克和Jill的Android兼容字节码编织?
- Android Studio如何在片段中加载animation
- Android WebView跳转到每个页面上的更新(?)
- 仅在AppBarLayout完全展开时启用SwipeRefreshLayout
- Android Kotlin`.replaceRange`不会替换SpannableString中的文本