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上投票或发表评论