在学习java动态代理,看到Proxy类中Objects.requireNonNull(T)Objects.requireNonNull(T obj, String message)来判断传入方法的参数是否为null并抛出异常信息

例如:

public void doSomething(String customerName, Integer age) {Objects.requireNonNull(customerName, "customerName cannot be null");Objects.requireNonNull(age, "age cannot be null");...
}

但这和使用if(obj==null)判断是否为null的有什么差别呢

其实javaAPI文件就有说明了,主要就是用来验证方法输入参数是否为null,例如之前通常写法如下:

public Foo(Bar bar) {if(bar == null) {throw new NullPointerException();} else {this.bar = bar;}
}

有这个方法泽可以写为:

public Foo(Bar bar) {this.bar = Objects.requireNonNull(bar);
}

一旦传入的参数为null,会抛出NullPointerException

Objects.requireNonNull(T)Objects.requireNonNull(T obj, String message)是Java 7才加入的工具类,源码如下:

public static  T requireNonNull(T obj) {if (obj == null)throw new NullPointerException();return obj;
}public static  T requireNonNull(T obj, String message) {if (obj == null)throw new NullPointerException(message);return obj;
}

若传入的参数不为null,则返回原参数,因此可确保传入的参数不为null

简言之就是不需要每次都要自己用if()判断传入参数是否为null了,

好处是可读性佳,从名称就可以清楚知道的接收得参数应为null,且可直接给定错误信息。搭配写在方法的开头位置,可链到fail-fast的设计目的

而java 8 可以用Optional.of(T val)替代,例如:

public Foo(Bar bar) {this.bar = Optional.of(bar).get();// orthis.bar = Optional.of(s).orElseThrow(() -> new NullPointerException("bar cannot be null"));
}

Java Objects.requireNonNull相关推荐

  1. java requirenonnull_Java null判断新方法:Objects.requireNonNull 你过用吗?

    1.方法介绍 有时候,我们为了使得对象不为空,可以使用Objects.requireNonNull()方法对对象进行判断,方法参数: Objects.requireNonNull(T obj); Ob ...

  2. Objects.requireNonNull 方法说明

    在写代码的时候,Idea经常会提醒我们可以使用这个方法来进行参数非空检查, 这个方法的源码也非常简单, 如下所示: /*** Checks that the specified object refe ...

  3. 深入挖掘为什么要使用Objects.requireNonNull方法

    引入 在一次学习过程中,通过ImageIO.read方法访问本地图片的时候,IDEA给出了Warning并提出了改善建议: //源码为: bullet=ImageIO.read(ResourceMgr ...

  4. Objects.requireNonNull( )方法说明

    Objects.requireNonNull( )方法在java.util.Objects中 作用就是判断一个对象是否为空 底层源码: /* @param obj 需要检测是否为空的对象* @para ...

  5. Java 快速深度克隆对象 [Faster Deep Copies of Java Objects]

    最近深刻纠结于复杂对象的clone, 实在苦恼于写多个对象的clone函数,于是收集网上的deep clone方法,真是适合我这种懒人~~ The java.lang.Object root supe ...

  6. Generate Java objects for FpML using JAXB and Maven: The Easy Way!

    http://www.stephennimmo.com/generate-java-objects-for-fpml-using-jaxb-and-maven-the-easy-way/ http:/ ...

  7. 【Java】java.util.Objects 工具类方法研究

    [Java]java.util.Objects 工具类方法研究 Objects 与 Object 区别 Object 是 Java 中所有类的基类,位于java.lang包. Objects 是 Ob ...

  8. java.util.Objects 简介

    java.util.Objects 类 包含了几个静态方法,可以实现对对象的比较.生成hash code之类的功能, 很多方法里考虑了对象是null的情况,在输入的参数是null时有特定的处理方式. ...

  9. Java中Objects类的方法介绍(已更新)

    使用软件:eclipse 2019-2 jdk:11 首先,Objects类是属于Java的工具类,具体包的位置是java.Util.Objects.它是在jdk1.7版本中添加的一些用来检查的工具, ...

最新文章

  1. android联动动画,利用 CollapsingToolbarLayout 完成联动的动画效果
  2. linux添加ssl信任根证书,linux系统添加根证书linux证书信任列表
  3. 程序员的十大谎言,你中了几个? | 每日趣闻
  4. android连接Mysql数据库之JDBC方式
  5. JVM学习01总体概述
  6. 【干货】吴恩达deeplearning.ai专项课程历史文章汇总
  7. 简单,方便,功能全的php分页类
  8. MFC基于单文档制作吹彩色泡泡程序
  9. elasticsearch_spring-data-elasticsearch 快速入门-Spring Boot+Elasticsearch
  10. 如何规划局域网IP地址
  11. POJ 3253 Fence Repair(修篱笆)
  12. 嵌入式开发之NorFlash 和NandFlash
  13. 纯流量卡(物联卡)的套路,你了解多少
  14. 人工智能现在的发展前景如何?
  15. 秀外慧中雒芊芊:站在陈天桥背后的女人
  16. Vertx DNS解析源码
  17. Acknowledgements致谢词
  18. 直流变频电机驱动的技术原理及特点
  19. GMap.net地图下载器
  20. ssm基于Android社区生鲜O2O订购系统设计与实现毕业设计源码231443

热门文章

  1. dijkstra java pre_Edsger Dijkstra经典言论 - CSDN博客
  2. 2016年Q2《网络安全创新500强》榜单解读
  3. [Wow addon]HudMap 4.3版本升级
  4. 分享iPhone新系统的新功能
  5. iOS学习笔记-068.手势识别02——捏合、拖拽、旋转手势
  6. hgame-2022-week4
  7. Hgame2021,web,week1
  8. 【产品】飞信V5.2.2体验
  9. LA租车买车攻略在洛杉矶租车时,只会说一个car可远远不够哦~
  10. 鸡卵清白蛋白偶联维生素A(VA-OVA),Vitamin A-Ovalbumin Conjugate