为什么这个Kotlin扩展失败Android Studio Lint检查?

在Android开发中,当且仅当设备的SDK大于或等于最小版本时,才需要执行一段代码。

为了避免这个代码的往往丑陋和重复的性质,我创建了下面的扩展。

inline fun  runWithMinSdk (minVersion: Int, func: () -> T) { if (android.os.Build.VERSION.SDK_INT >= minVersion) { func() } } 

没有什么太花哨,似乎在纸上做的伎俩。

但是 ,当我使用这样的代码:

 fun myFun { runWithMinSdk(Build.VERSION_CODES.O) { exampleMethodThatRequiresOreo() } } 

Android Studio引发了一个hissy fit,它失败了Lint检查,要么抑制myFun() ‘NewApi’警告,要么包装runWithMinSdkif android.os.Build.VERSION.SDK_INT ... etc

有没有更好的方式来实现这个function,使其通过林特检查或使用扩展是不可能的这是可能的吗?

基于这个在Kotlin论坛这个讨论似乎做这样的事情是不可能的,因为林特只能看当前的注释function。 例如,如果你这样做

 val func = @TargetApi(26) { exampleMethodThatRequiresOreo() } runWithMinSdk(Build.VERSION_CODES.0, func) 

你不会得到警告,但也有点挫败这个扩展function的目的。 在上面的讨论中的OP提到将function请求发送给Anko,但是我在那里找不到相关的问题。