为什么这个Kotlin扩展无法通过Android Studio Lint检查?

时间:2018-02-06 14:58:40

标签: android kotlin

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

为了避免此代码经常出现丑陋和重复的问题,我创建了以下扩展名。

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

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

然而,当我这样使用这段代码时:

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

Android Studio引发了他的气氛,它没有通过Lint检查,要求压制&#39; NewApi&#39; myFun()内的警告或runWithMinSdk阻止if android.os.Build.VERSION.SDK_INT ... etc

是否有更好的方法来实现此功能,使其通过Lint检查或使用扩展是否可能?

1 个答案:

答案 0 :(得分:0)

基于这个this discussion in the Kotlin forum,似乎做这样的事情是不可能的,因为Lint只能查看注释的当前函数。例如,如果你这样做

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

你不会得到警告,但这也有点违背了这个扩展功能的目的。上面讨论中的OP提到了向Anko提出功能请求,但我找不到相关的问题。