我想知道是否有可能实现多种方法来支持不同的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,但有答案,如果否则。
如何使用正确的方法为当前运行的版本,如果不这样做丑陋的其他
你不能。在某个地方,某些东西需要进行版本检查并路由到适当的逻辑。
也许使用@RequiresApi(),@ TargetApi或其他东西来注释我的方法..?
这些是帮助建议编译器你知道你在做什么。它们不代码生成版本比较。
根据您的操作,现有的...Compat
类可能会为您处理版本检查(例如,NotificationCompat.Builder
)。如果您使用Kotlin,我们可以提出一些隐藏if
检查的时髦代码。并且可能存在第三方库,其提供一些基于注释的代码生成器,其代码生成if
检查。