在Kotlin构建时,Android API版本检查不会发生

时间:2018-01-24 06:17:34

标签: android kotlin

如何让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 个答案:

答案 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上的问题进行投票或评论

https://youtrack.jetbrains.com/issue/KT-20358

https://youtrack.jetbrains.com/issue/KT-21503