ahe*_*man 4 android lint sparse-matrix kotlin android-12
将compileSdkVersion增加到31(Android 12)后,执行lint检查时,出现以下问题:
错误:调用需要 API 级别 S(当前最小值为 23):android.util.SparseArray#set [NewApi]
增加此值后是否有人遇到类似的问题,为什么会发生?
Ten*_*r04 19
set是在 Android 12 中添加的,只是一个副本put功能的复制品,您可以自由使用。
他们使用不同名称复制该函数的原因是数组访问语法可以在 Kotlin 中使用。当 Kotlin 编译器在 Java 类中看到具有名称set和两个参数的函数时,它允许使用如下数组语法来调用它:
mySparseArray.put(3, someObject)
// is the same as
mySparseArray[3] = someObject
Run Code Online (Sandbox Code Playgroud)
但由于他们只在 Android 12 中添加了它,因此如果您的目标低于 Android 12(sdk 版本 31),则使用新功能是不切实际的,因此需要几年时间才能变得有用。
在我看来,将此函数添加到基类中是一个错误,因为现在不可能在几年内使用数组访问语法,直到最终使 SDK 31 成为明智的minSdkVersion。在添加它之前,可以使用扩展函数来实现此功能,但现在不能使用扩展函数,因为它的名称会掩盖基类中的名称。此外,lint 不会显示数组访问语法的错误,因此如果使用它,它会在运行时崩溃。他们应该把它作为扩展函数放入androidx-core-ktx.
编辑:如果我正确理解“向后移植”,看起来这可能会在即将发布的版本中得到修复。
| 归档时间: |
|
| 查看次数: |
1867 次 |
| 最近记录: |