问题

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

我得到的错误是这样的:

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

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

#1 热门回答(101 赞)

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

protected void onSaveInstanceState(@NonNull Bundle outState)

(并且)

import android.support.annotation.NonNull;

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

@NonNull注释可用于指示给定参数不能为空。如果已知局部变量为null(例如,因为某些早期代码检查它是否为null),并且将其作为参数传递给该参数标记为@NonNull的方法,IDE将警告你有潜在的崩溃。

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

在这种情况下,特定警告是你覆盖的原始方法(inActivity)在outState参数上有一个@NonNull注释,但你没有将它包含在重写方法中。只是添加它应该解决问题,即

@Override

protected void onSaveInstanceState(@NonNull Bundle outState) {

super.onSaveInstanceState(outState);

}

#2 热门回答(13 赞)

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

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

dependencies {

compile 'com.android.support:support-annotations:20.0.0'

}

你收到警告,因为Bundle参数标记为@NotNull注释,并通过覆盖注释被隐藏的方法。正确的做法是将注释添加到overriden方法的参数中。

@Override

protected void onSaveInstanceState(@NonNull Bundle outState) {

super.onSaveInstanceState(outState);

}

#3 热门回答(7 赞)

除了其他答案之外,@NonNull(以及它的对手,@Nullable)注释会注释字段,参数或方法返回类型。 IntelliJ和Android Studio可以在编译时警告你可能的NullPointerException。

一个例子最好:

@NonNull private String myString = "Hello";

@Nullable private String myOtherString = null;

@NonNull

public Object doStuff() {

System.out.println(myString.length); // No warning

System.out.println(doSomething(myString).length); // Warning, the result might be null.

doSomething(myOtherString); // Warning, myOtherString might be null.

return myOtherString; // Warning, myOtherString might be null.

}

@Nullable

private String doSomething(@NonNull String a) {

return a.length > 1 ? null : a; // No warning

}

这些注释不会改变运行时行为(尽管我有这个),但它可以作为防止错误的工具。

请注意,你收到的消息不是错误,而只是一个警告,如果你愿意,可以安全地忽略。另一种方法是自己注释参数,因为Android Studio建议:

@Override

protected void onSaveInstanceState(@NonNull Bundle outState) {

super.onSaveInstanceState(outState);

}

android @nonnull的作用,Android Studio错误的含义:未注释的参数会覆盖@NonNull参数相关推荐

  1. android 混淆规则作用,Android混淆规则

    简介 Java代码是非常容易反编译的.为了很好的保护Java源代码,我们往往会对编译好的class文件进行混淆处理. ProGuard是一个混淆代码的开源项目.它的主要作用就是混淆,当然它还能对字节码 ...

  2. Android适配器以及作用,Android RecyclerView 通用适配器的实现

    分析 我们需要在RecyclerViewAdapter内部维持一个数据集合的引用 需要实现Item的点击事件,包括短按和长按,并需要向外部提供设置监听器的方法 这个适配器必须通用,所以应该是泛型的,并 ...

  3. android布局的作用,Android UI布局经验总结

    如何在Android中动态设置颜色透明?10%20%到100% Android布局分析工具HierarchyView Android使用include/merge/ViewStub优化布局 List的 ...

  4. android scaletype没作用,Android源码系列之深入理解ImageView的ScaleType属性

    做Android开发的童靴们肯定对系统自带的控件使用的都非常熟悉,比如Button.TextView.ImageView等.如果你问我具体使用,我会给说:拿ImageView来说吧,首先创建一个新的项 ...

  5. android minheight的作用,Android 自定义 View 最少必要知识

    1. 什么是自定义 View? 1.1 定义 在 Android 系统中,界面中所有能看到的元素都是 View.默认情况下,Android 系统为开发者提供了很多 View,比如用于展示文本信息的 T ...

  6. Android监听作用,Android开发之CheckBox的简单使用与监听功能示例

    本文实例讲述了Android开发之CheckBox的简单使用与监听功能.分享给大家供大家参考,具体如下: activity_main.xml android:layout_width="ma ...

  7. android scaletype没作用,Android ImageView的ScaleType属性

    参考 ScaleType属性 常量 含义 fitXY 横向.纵向独立缩放,以适应该ImageView fitCenter 保持纵横比缩放图片,缩放完成后将图片放在ImageView的中央 fitSta ...

  8. android scaletype没作用,Android ImageView 的scaleType 属性图解

    ImageView 是 Android 中最常用的控件之一,而在使用ImageView时,必不可少的会使用到它的scaleType属性.该属性指定了你想让ImageView如何显示图片,包括是否进行缩 ...

  9. u盘里android文件夹作用,Android应用开发android tv box ---- 插入u盘直接播放指定文件夹中的视频...

    本文将带你了解Android应用开发android tv box ---- 插入u盘直接播放指定文件夹中的视频,希望本文对大家学Android有所帮助. android tv box ---- 插入u ...

最新文章

  1. GPS小车移动应用程序
  2. deque双向队列的使用
  3. 死锁:多线程同时删除唯一索引上的同一行
  4. 自动清理归档日志_从MYSQL 数据库归档 到 归档设计
  5. 计算机科学与技术文科可以学么,文科生成绩一般,大学可以选择计算机吗?
  6. eclipse 下编写java code 比较好的设置和快捷键
  7. 数据分析避坑必读:让人怀疑人生的七大悖论
  8. windows服务与前台交互
  9. 剑指offer——面试题4:替换空格
  10. rapidxml往xml文件循环写入内容
  11. Opencv入门——读写图像、读写像素、修改像素值
  12. 电动自行车16 CFR 1512标准要求及流程
  13. 局域网内,两台电脑时间同步
  14. Entity Alignment between Knowledge Graphs Using Attribute Embeddings
  15. Labview实现简单知乎日报客户端
  16. 豆瓣上征婚交友的小姐姐们
  17. 第十三届蓝桥杯模拟赛(第三期)试题与题解 C++
  18. FFmpeg进阶: 截取视频生成gif动图
  19. GNU开发工具的使用方法
  20. Field ‘recordID‘ doesn‘t have a default value

热门文章

  1. js案例:模拟淘宝网
  2. 初中学业水平计算机考不及格,初中学业水平考试不及格能毕业吗?初中学业水平考试重不重要?...
  3. python实现模拟登录云课堂智慧职教并获取课程信息(2)
  4. JVM(五):类文件结构
  5. 不知道如何选题,我来告诉你。
  6. 找工作如何避免培训机构骗局
  7. 【点宽专栏】后疫情时代,商业银行的数字化转型之路
  8. 隐函数求导例题及解析
  9. turtle画图(太阳)
  10. 二分法(Bisection)与牛顿法(Newton)求方程的根