android - Android Studio 3.0-alpha8 中的 Kotlin apply() 扩展 lint 消息

标签 android android-studio kotlin lint

我有以下代码会产生以下 lint 错误。 lint issue

fun newInstance(message: String?): DialogFragment {
    return DialogFragment().apply {
        arguments = Bundle().apply {
            putString("arg", message)
        }
    }
}

消息指出,apply() 函数中的 this 引用指向自 API 21 以来可用的 BaseBundle 类,该类将崩溃较低的 API。 Bundle#putString(key, value)低版本肯定有,但是Android Studio 3.0-alpha8有错误。

这个问题很奇怪,因为我可以看到反编译的代码是这样的: decompiled

引用 Bundle 类型而不是 BaseBundle

为什么我们首先会出现 Lint 错误?

最佳答案

真的像个bugknown bug但是如果查看 Bundle.java 源代码,您实际上可以明白为什么会收到警告。

在 api 21 Bundle 之前有一个方法 (check here)

public void putString(@Nullable String key, @Nullable String value)

并且该类本身没有父类(super class)。从 api 21 Bundle 扩展了一个新添加的 BaseBundle 类,这个方法 putStringmovedBaseBundle。所以,当你在 api 21 及以上调用方法时,该方法属于 BaseBundle,对于较低版本它属于 Bundle

这在某种程度上与 apply block 有关,因为如果您直接在 Bundle 类型的变量上调用该方法,则不会出现警告。

关于android - Android Studio 3.0-alpha8 中的 Kotlin apply() 扩展 lint 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45415947/

相关文章:

android - 如何使用流协程创建倒计时

android - 如何在 Android Jetpack Compose 中禁用可组合预览?

android - SearchView 没有获得焦点

内部存储器上的Android公共(public)文件

android - 自定义数据类型渲染器部署

android - Gradle 代码未构建 : aidl is missing

android - 删除项目并添加新项目后出现错误 : Maximum number of items supported by BottomNavigationView is 5,

android - HLS Streaming 寻求不适用于 android 3.0+

java - XML 布局到 Java 代码转换器

android - Android升级minSdkVersion有什么影响?