如何让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或编译器应报告的错误。
答案 0 :(得分:3)
很可能这将由Android Studio / Kotlin团队完成。
理论上的方法kotlin.Map.getOrDefault()
在任何Android API上都有效,但其内部实现(委托对java.util.HashMap.getOrDefault()
的调用)仅在JDK 1.8 +上有效。
此外,其文档中的方法kotlin.Map.getOrDefault()
标记为@since JDK 1.8
。我想我们需要等待一段时间让IDE团队对文档中标记为@since XXX
您还可以对Kotlin的YouTrack上的问题进行投票或评论