为不同的API级别实现多个方法,而不是确定要调用哪个方法

问题描述 投票:0回答:1

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

我想使用android平台的新功能,如streams等,仍然支持倒退。

例:

写了一个方法

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或其他东西来注释我的方法..?

我看到这个question,但有答案,如果否则。

android android-api-levels
1个回答
0
投票

如何使用正确的方法为当前运行的版本,如果不这样做丑陋的其他

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.