这个问题在这里已有答案:
如何让Kotlin在编码时给出API级错误,而不是在运行时 .
App Gradle文件:
minSdkVersion 19
targetSdkVersion 26
Kotlin代码:
//initialisation
var data = getSomedata() //the returned type is Map<String, String>
data.getOrDefault("SomeKey","DefaultValue")
问题:
代码编译很好,也能够创建签名的APK . 但是当在具有API 22(Android 5)的设备上执行APK时,会抛出错误 .
致命异常:java.lang.NoSuchMethodError
预期的行为:
如果我在java文件中调用该函数,lint检查甚至会在编译之前给出以下错误 .
调用需要API级别24(当前最小值为19):java.util.Map#getOrDefault
CHECKED DUPLICATE
已经检查this question . 它为我已经衍生出的行为提供了理由 . 我需要解决方案或解决 . 截至目前,我不确定哪些方法在运行时不起作用,用户将报告IDE或编译器应报告的那些错误 .
1 回答
很可能这将由Android Studio / Kotlin团队完成 .
方法
kotlin.Map.getOrDefault()
理论上对任何Android API都有效,但其内部实现(委托调用java.util.HashMap.getOrDefault()
)仅在JDK 1.8上有效 .此外,其文档中的方法
kotlin.Map.getOrDefault()
标记为@since JDK 1.8
. 我想我们需要等待一段时间让IDE团队为docs中标记的方法实施警告@since XXX
您还可以对Kotlin的YouTrack上的问题进行投票或评论
https://youtrack.jetbrains.com/issue/KT-20358
https://youtrack.jetbrains.com/issue/KT-21503