codecamp

@Nullable和@NotNull注释的使用

本节介绍在 IntelliJ IDEA 中引入的 @Nullable 和 @NotNull 注释,IntelliJ IDEA 引用这两个注释来通过恒定条件和异常来捕获 NullPointerException(NPE)以及@Nullable 问题检查。

这些注释旨在帮助您在整个方法层次结构中查看合同,以避免出现 NPE。此外,IntelliJ IDEA 为他们提供了另一个好处:代码检查机制通知您这些合同在注释方法的地方的差异,并在某些情况下提供自动化解决方案。 

两个注释 - @Nullable 和 @NotNull - 处理方法调用和字段取消引用外部方法。

IntelliJ IDEA @Nullable 注释

@Nullable 注释提醒您必须在以下情况下引入 NPE 检查:

  • 调用可以返回 null 的方法。
  • 取消引用可以为 null 的变量 (字段、局部变量和参数)。

IntelliJ IDEA @NotNull 注释

实际上,@NotNull 注释是明确的声明了以下内容的协定:

  • 一个方法不应该返回 null。
  • 变量(如字段、局部变量和参数)不能保留 null 值。

是否如果违反了这些协定,IntelliJ IDEA 将警告您。

@Nullable 和 @NotNull 注释正式的语义

用 @Nullable 声明注释的元素 null 值对于返回 (方法)、传递给 (参数) 和保持 (对于局部变量和字段) 是完全有效的。

用 @NotNull 声明注释的元素不允许返回 null 值 (对于方法),传递给(对于参数)和保持(对于局部变量和字段)。

当使用带注释的声明或参数来重写/实现方法时,@Nullable 和 @NotNull 之间存在一个协方差-逆变关系。

  • 使用注释声明重写/实现方法:父方法的 @NotNull 注释需要针对子类方法的 @NotNull 注释。使用父方法中的 @Nullable 注释的方法在子类方法中可以具有@Nullable 或 @NotNull 注释。
  • 使用带注释参数的重写/实现方法:父方法中的参数 @Nullable 注释需要针对子类方法参数的 @Nullable 注释。父方法中参数的 @NotNull 注释的方法对于子类方法参数可以具有 @Nullable 或 @NotNull 注释(或不包含它们)。

怎么生成@Nullable和NotNull?

在Android Studio中已经帮我们导入了相关的注释包,只要点击Android studio中的Infer Nullity变可以生成相应的注释。





IntelliJ IDEA如何配置意图行为
IntelliJ IDEA怎么使用@Contract注释
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

IntelliJ IDEA的一般准则

什么是IntelliJ IDEA项目

使用IntelliJ IDEA的意图行为

IntelliJ IDEA使用运行/调试配置

特定于VCS的程序

IntelliJ IDEA语言和特定框架指南

IntelliJ IDEA的数据库和SQL功能

IntelliJ IDEA使用之JavaServer Faces(JSF)

IntelliJ IDEA:分析PHP应用程序的性能

IntelliJ IDEA:调试PHP应用程序

IntelliJ IDEA:适用于PHP的Google App Engine

IntelliJ IDEA更多内容

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }