我在我的安卓项目中使用Kotlin的MutableMap。试着在每件事上做些动作。这是我的密码。
private val uris: MutableMap<String, Uri> = 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 24岁之前,我们不能将JDK-8的Map用于Android项目。但是为什么林特认为它是JDK-8的地图呢?
为了了解更多信息,我尝试从AS中的Kotlin字节码选项中获取Java代码,并发现forEach按照预期被替换为while循环和迭代器。
那么,什么是理性,如何解决这一问题呢?任何线索都将不胜感激。
发布于 2018-01-25 07:46:49
在foreach上有两个重载的Map
科特林一号:
uris.forEach { (key, value) -> // Do some Action }Java8 one:
uris.forEach { key, value -> // Do some Action }令人困惑,不是吗?
发布于 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/
发布于 2018-01-25 07:33:31
你确定你用的是Kotlin的forEach吗?因为有两个forEach,一个来自Map.Entry作为参数的Kotlin,另一个来自带有两个参数的Java : key和value。请出示你的代码的完整版本。如果使用没有参数的forEach,就意味着使用Kotlin (您有it隐式参数)。
如果您使用Kotlin forEach,但仍有此警告,则应向Android问题跟踪器报告此问题。
https://stackoverflow.com/questions/48437358
复制相似问题