使用Optional更优雅地处理非空判断()

  本篇文章为你整理了使用Optional更优雅地处理非空判断()的详细内容,包含有 使用Optional更优雅地处理非空判断,希望能帮助你了解 使用Optional更优雅地处理非空判断。

   在平常的编码之中,有一个错误总会在你的意料之外出现,那就是空指针异常。空指针的出现也很简单,你得到了一个null对象,调用了一些方法,出现空指针异常。空指针会出现在各种地方,常见的比如Map.get()没有获取到对象就调用对象例的方法,类对象没有获取到就调用类中的方法。

   空指针的处理方式也很多,最简单的方式就是用if/else判空,但是这样就会显得代码特别繁琐。

   在没有用Optional判空之前,你是否也像下面的代码一样判空呢?如果是,请往下看,Optional 相对传统判空的优势。

   这篇文章就带你用JDK8中的Optional来解决空指针异常。

   二:什么是Optional

   Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。Optional 是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。Optional 类的引入很好的解决空指针异常。Optional 的方法如下:

  三:Map集合空值判断

   集合类型的判空在某些场景下会十分啰嗦,比如我最近刚遇到的一种场景,接收到的Map是这样的:

  

{"user":{"info":{"address":"hz"}}}

 

  这种时候如果按照常规的写法,需要写多层if语句进行判空

  

if (map.get("user")!=null){

 

   Map String,Object user = (Map String, Object ) map.get("user");

   if (user.get("info")!=null){

   Map String,Object info = (Map String, Object ) user.get("info");

   if (info.get("address")!=null){

   String address = (String) info.get("address");

   System.out.println(address);

  }

 

  if里面套着if,结构十分复杂,这个时候我们就可以使用Optional

  

String address=Optional.ofNullable(map)

 

   .map(m- (Map String,Object )m.get("user"))

   .map(user- (Map String,Object )user.get("info"))

   .map(info- (String)info.get("address"))

   .orElse(null);

 

  四:对象类型空指判断

  首先构造一下简单的对象:

  

@Data

 

  public class User {

   private UserInfo info;

  @Data

  public class UserInfo {

   private String address;

  }

 

  给User对象赋予基本的值

  

User user=new User();

 

  UserInfo userInfo=new UserInfo();

  userInfo.setAddress("hb");;

  user.setInfo(userInfo);

 

   通常情况下在使用User对象时需要使用多层if/else判空,就像下面这样:

  

if (user!=null){

 

   UserInfo info = user.getInfo();

   if (info!=null){

   String address = info.getAddress();

  }

 

  使用Optional就可以用一行代码解决问题:

  

String address = Optional.ofNullable(user)

 

   .map(u - u.getInfo())

   .map(info - info.getAddress())

   .orElse(null);

 

  Optional还可以在普通的场景下使用,比如当某个值为空时设置默认值:

  

User resultUser = Optional.ofNullable(user).orElse(new User());

 

  又比如判断一个对象是否为空:

  

boolean isPresent = Optional.ofNullable(user).isPresent();

 

  Optional 是java非常有用的一个补充,它旨在减少代码中的NullPointerExceptions,虽然不能百分之百的消除,但也是精心设计的。使用Optional 能更好的帮助我们创建可读性强,bug更少的应用程序。

  以上就是使用Optional更优雅地处理非空判断()的详细内容,想要了解更多 使用Optional更优雅地处理非空判断的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: