`@Nullable @org.jetbrains.annotations.Nullable Intent data` 有啥作用,是不是有必要?

Posted

技术标签:

【中文标题】`@Nullable @org.jetbrains.annotations.Nullable Intent data` 有啥作用,是不是有必要?【英文标题】:What does `@Nullable @org.jetbrains.annotations.Nullable Intent data` do and is it necessary?`@Nullable @org.jetbrains.annotations.Nullable Intent data` 有什么作用,是否有必要? 【发布时间】:2021-09-16 20:38:05 【问题描述】:

我得到了一个像这样的自动生成的覆盖:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable @org.jetbrains.annotations.Nullable Intent data) 
        super.onActivityResult(requestCode, resultCode, data);
    

@Nullable @org.jetbrains.annotations.Nullable Intent data 部分看起来很奇怪,我不确定它是否有必要存在。 android Studio 是否需要@org.jetbrains.annotations.Nullable 才能正常运行?

【问题讨论】:

我不了解 android studio(这就是我在这里写这篇文章的原因),但通常没有必要。它标记该字段可能为空,因此如果您写data.something,编辑器将显示警告 【参考方案1】:

不,不需要在这个方法中添加@Nullable注解。这只是为了让程序员知道data 在某些时候可能是null。这对编译器也很有帮助,如果您添加 @Nullable 并且您不检查它是否为空,编译器可能会警告您可能会得到 NullPointerException

编辑

也许这个Annotating Type Arguments And Type Parameters 可以帮助您了解差异。 (这仅适用于 kotlin

还有两种类型:

1.- Jetbrains Annotations

2.- Android Annotations

但大致是因为如果您使用 jetbrains,它会在 intelIJ IDE 上警告您,例如,如果您通过终端运行 lint 代码,它不会警告您,而 android 会警告您即使您在管道、棉绒等上运行它也会警告您。

所以也许改用androidx.annotation.Nullable 更好,这样更准确。

【讨论】:

我实际上是在问为什么有两个可空值,我基本上知道它自己的作用,但不知道为什么他们认为添加其中两个是合理的默认值(一个来自 androidx 注释,一个来自jetbrains 注释) 编辑了我的答案@JustAnEuropean 好吧,我认为唯一重要的其他信息是 androidx 注释是否与 jetbrains 注释在同一级别上被识别,但快速检查显示它们是。您的回答对我来说有点难以理解,但我想它包含该信息,所以好吧。

以上是关于`@Nullable @org.jetbrains.annotations.Nullable Intent data` 有啥作用,是不是有必要?的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio 缺少必要的插件 org.jetbrains.android

执行 org.jetbrains.kotlin 时缺少必需的类

找不到 org.jetbrains.kotlinx:kotlinx-html:0.6.4

覆盖方法会导致 Android Studio 中出现冗余、重复的注解

“kotlin-android”和“org.jetbrains.kotlin.android”是一样的吗?

在以下任何来源中均未找到插件 [id: 'org.jetbrains.kotlin.jvm', version: '1.2.71']