SparseArray error: Call requires API level S

SparseArray error: Call requires API level S

将compileSdkVersion增加到31(Android 12)后,执行lint检查时,出现以下问题:

错误:调用需要 API 级 S(当前最小值为 23):android.util.SparseArray#set [NewApi]

有没有人在递增后遇到类似的问题,为什么会出现?

set 是在 Android 12 中添加的,只是 put 函数的副本,您可以随意使用它。

他们用不同名称复制函数的原因是数组访问语法可以在 Kotlin 中工作。当 Kotlin 编译器在 Java class 中看到名称为 set 和两个参数的函数时,它允许使用如下数组语法调用它:

mySparseArray.put(3, someObject)

// is the same as

mySparseArray[3] = someObject

但由于他们只在 Android 12 中添加了它,如果您的目标是低于 Android 12(sdk 版本 31)的任何东西,则使用新功能是不切实际的,因此它将需要几年才能有用。

在我看来,将此功能添加到基础 class 是一个错误,因为现在几年内不可能使用数组访问语法,直到最终变得明智,使 SDK 31 成为minSdkVersion。在他们添加之前,可以使用扩展函数来实现此功能,但现在无法使用扩展函数,因为它的名称会遮盖基础 class 中的函数。此外,lint 不会显示数组访问语法的错误,因此如果您使用它,它会在运行时崩溃。他们应该把它作为 androidx-core-ktx.

中的扩展函数

编辑:看起来这可能是 fixed in an upcoming version,如果我对“向后移植”的理解正确的话。