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,如果我对“向后移植”的理解正确的话。
将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,如果我对“向后移植”的理解正确的话。