为不同的 API 级别实现多个方法,而不是做其他方法来决定调用哪一个



我想知道是否可以实现多种方法来支持不同的 API 级别并在没有if(android.os.Build.VERSION.SDK_INT >= ...) else if...的情况下调用正确的方法?

我想使用 android 平台的新功能,如流等,并且仍然支持向后。

例:

编写了一个方法

public void myMethod24() {
    // some logic requires api level N(24) and above
}

但是我的应用程序支持较低的 API,所以我需要另一种与它们兼容的方法。

以下是与旧版本兼容的方法:

public void myMethod21() {
    // the same logic, requires api level LOLLIPOP(21) and above
}

如何为当前运行的版本使用正确的方法,而不会这样做,否则:

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
    myMethod24();
} else if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
    myMethod21();
}

也许用@RequiresApi((,@TargetApi或其他东西注释我的方法..?

我看到了这个问题,但答案是 如果不是。

如何为当前运行的版本使用正确的方法而不这样做,否则会很丑陋

你不能。在某个地方,某些东西需要执行版本检查并路由到适当的逻辑。

也许用@RequiresApi((,@TargetApi或其他东西注释我的方法..?

这些是为了帮助建议编译器你知道你在做什么。它们不会通过代码生成版本比较。

根据您正在执行的操作,现有的 ...Compat 类可能会为您处理版本检查(例如,NotificationCompat.Builder (。如果您使用的是 Kotlin,我们可以想出一些时髦的代码来隐藏if检查。并且可能有一个第三方库提供一些基于注释的代码生成器,用于代码生成if检查。

相关内容

最新更新