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

如何让Kotlin在编码时给出API级错误,而不是在运行时。

应用程序Gradle文件:

minSdkVersion 19 targetSdkVersion 26 

科特林代码:

 //initialisation var data = getSomedata() //the returned type is Map data.getOrDefault("SomeKey","DefaultValue") 

问题:

代码编译良好,也能够创建签名的APK。 但是,当在具有API 22(Android 5)的设备上执行APK时,会引发以下错误。

致命exception:java.lang.NoSuchMethodError

预期beheviour:

如果我在java文件中调用函数,甚至在编译之前,lint检查会给出以下错误。

调用需要API级别24(当前最小值为19):java.util.Map#getOrDefault

检查重复

已经检查过这个问题 。 这是为我已经得出的行为提供理由。 我需要解决方法或解决。 到目前为止,我不确定哪些所有的方法在运行时都不起作用,用户会报告那些IDE或编译器应该报告的错误。

很有可能这必须由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