关于@NotNull 和 @Nullable

关于@NotNull 和 @Nullable阅读spring源码发现里面用到两个注解@NotNull和@Nullable,现在做一个简单的分析参考文档:避免Java应用中NullPointerException的技巧和最佳实践安卓中的@Nullable和NotNull注释在写程序的时候你可以定义是否可为空指针。通过使用像@NotNull和@Nullable之类的annotation来声明一个方法是否是空指针安全的。…

大家好,又见面了,我是你们的朋友全栈君。

阅读spring源码发现里面用到两个注解@NotNull 和 @Nullable,现在做一个简单的分析

参考文档:

避免Java应用中NullPointerException的技巧和最佳实践

安卓中的@Nullable和NotNull 注释

在写程序的时候你可以定义是否可为空指针。通过使用像@NotNull和@Nullable之类的annotation来声明一个方法是否是空指针安全的。现代的编译器、IDE或者工具可以读此annotation并帮你添加忘记的空指针检查,或者向你提示出不必要的乱七八糟的空指针检查。IntelliJ和findbugs已经支持了这些annotation。这些annotation同样是JSR 305的一部分,但即便IDE或工具中没有,这个annotation本身可以作为文档。看到@NotNull和@Nullable,程序员自己可以决定是否做空指针检查。顺便说一句,这个技巧对Java程序员来说相对比较新,要采用需要一段时间。

用法

如果可以传入NULL值,则标记为@Nullable,如果不可以,则标注为@Nonnull。那么在我们做一些不安全严谨操作的编码操作时,这些注释会给我们一些警告。如下是我看spring源码时,发现用到@Nullable,借此源码做个测试:

public FileSystemXmlApplicationContext(String[] configLocations, boolean refresh, @Nullable ApplicationContext parent) throws BeansException {
    super(parent);
    this.setConfigLocations(configLocations);
    if (refresh) {
        this.refresh();
    }

}

我们把@Nullable改成@Nonnull,然后发现调用该方法的地方出现告警:

public FileSystemXmlApplicationContext(String... configLocations) throws BeansException {
     // here warning   
     this(configLocations, true, (ApplicationContext)null);
}

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/131156.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • C语言中的移位运算

    C语言中的移位运算移位运算移位运算包括左移和右移左移运算:x<<k:x左移k位,并在右端补零。右移运算:逻辑右移:x>>k:x右移k位,并在左端补零。算术右移:x>>k:x右移k位,并在左端补最高有效位的值。下表为对一个8位参数x的两个不同的值做不同的一位操作得到的结果:操作值参数x[01100011][10010101]x&l

  • Map和Set的区别「建议收藏」

    Map和Set的区别「建议收藏」Map和Set的区别—————————————–分割线—————————–  map和set都是stl中的关联容器,map以键值对的形式存储,key=value组成pair,是一组映射关系。set只有值,可以认为只有一个数据,并且set中元素不可以重复且自动排序,如果需要重复则使用multiset,要说…

  • 二、第一个java程序:HelloWorld

    二、第一个java程序:HelloWorld前面讲解了java程序的配置,现在要开始进入实例的编程了,第一个程序还是沿用经典的HelloWorld程序进行讲解。一、编程源代码     打开记事本,输入以下代码:publicclassHelloWorld{     //程序的主函数入门     publicstaticvoidmain(Stringargs[])

  • JVM类加载机制、双亲委派机制、自定义类加载器、打破双亲委派机制[通俗易懂]

    JVM类加载机制、双亲委派机制、自定义类加载器、打破双亲委派机制[通俗易懂]1、类加载器站在Java虚拟机的角度看,只有两种不同的类加载器:一种是启动类加载器(BootstrapClassLoader),这个类加载器使用C++语言实现(HotSpot虚拟机、JDK8中),是虚拟机自身的一部分;另外一种是其他所有类加载器,这些类加载器都由Java语言实现,独立存在于虚拟机外部,并且全部继承自抽象类java.lang.ClassLoaderJDK8及以前版本中绝大多数程序都会使用到以下3个系统提供的类加载器来进行加载启动类(引导类)加载器:负责加载支撑JVM运行的位于&l

  • 深度学习 | 三个概念:Epoch, Batch, Iteration

    深度学习 | 三个概念:Epoch, Batch, Iteration

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号