我想知道是否有可能实现多种方法来支持不同的API级别并调用正确的无 if(android.os.Build.VERSION.SDK_INT >= ...) else if...
吗?
我想使用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,但答案是否定的。
答案 0 :(得分:0)
如何在当前运行的版本中使用正确的方法,而不要在其他情况下执行此操作
不能。在某个地方,需要进行版本检查并将其路由到适当的逻辑。
也许用@RequiresApi(),@ TargetApi或其他方式注释我的方法??
那些可以帮助告知编译器您知道自己在做什么的人。他们不会代码生成版本比较。
根据您的工作,现有的...Compat
类可能会为您处理版本检查(例如NotificationCompat.Builder
)。如果您使用的是Kotlin,我们可以提供一些隐藏if
检查的时髦代码。可能会有一个第三方库提供一些基于注释的代码生成器,该代码生成器可代码生成if
检查。