Android Studio 错误的含义:未带注释的参数会覆盖@NonNull参数

我正在试用Android Studio。在创建一个新项目并将默认方法添加到 create MyActivity 类时,当我尝试将代码提交到 Git 时,我收到一个我不明白的奇怪错误。代码是这样的:onSaveInstanceState

我得到的错误是这样的:

enter image description here

如果我尝试将方法签名更改为 ,则IDE告诉我它无法解析符号。protected void onSaveInstanceState(@NotNull Bundle outState)NotNull

我需要做些什么来摆脱警告?


答案 1

这是一个注释,但正确的名称是:NonNull

protected void onSaveInstanceState(@NonNull Bundle outState)

(还有)

import android.support.annotation.NonNull;

目的是允许编译器在违反某些假设时发出警告(例如,应始终具有值的方法的参数,如在此特定情况下,尽管还有其他假设)。从支持注释文档中:

注释可用于指示给定参数不能为 null。@NonNull

如果已知局部变量为 null(例如,因为某些早期代码检查了它是否为 null),并且您将其作为参数传递给该参数标记为@NonNull的方法,则 IDE 将警告您有潜在的崩溃。

它们是静态分析的工具。运行时行为根本不会改变。


在本例中,特别的警告是,要重写的原始方法(在 中)对参数有注释,但未将其包含在重写方法中。只需添加它应该可以解决问题,即Activity@NonNulloutState

@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
    super.onSaveInstanceState(outState);
}

答案 2

Android 支持库中最近添加了许多有用的支持注释。它们的主要作用是注释各种方法和参数的属性以帮助捕获错误。例如,如果将值传递给标有批注的参数,则会收到警告。nullNotNull

通过添加以下依赖项,可以使用 Gradle 将注释添加到项目中:

dependencies {
    compile 'com.android.support:support-annotations:20.0.0'
}

您会收到警告,因为参数是用注释标记的,并且通过重写该方法,注释将被隐藏。正确的做法是将注释也添加到重写方法的参数中。Bundle@NotNull

@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
    super.onSaveInstanceState(outState);
}

推荐