李琪的技术专栏 System Research

java判空----Optional

2020-04-11
Clear Li

阅读:


引入

如果从前端传来的值不判断就执行操作那么可能会出现安全问题,或者有时候值就是一个空值。那么我们会首先判断一下如下所示

if (user != null){
   // do something
   if(user.address!=null){
   		//do something
   }
}

从上看来代码还是可以接受。但是假如每一个值都这样判断呢?我一直想的肯定有办法去解决的。springboot的有一个判空注解可以做到这一点。但是今天发现一个别的判空方式。

Optional类API

这个判空类是jdk1.8新引入的。下面是他的api

最重要的就是of和ofNullable对象,差别在于of不允许参数是null,而ofNullable则无限制。使用时首先创建Optional对象,将传入参数的判断交给Optional去执行。相当于Optional帮你做处理。下面是例子⬇⬇⬇⬇⬇

应用一

  User user = new User();
  Optional.ofNullable(user).ifPresent((u)->{
           System.out.println("u = " + u);
       });

简单解释一下,ofNullable判断传入对象是否为空,ifPresent判断传入参数(user)是否存在,存在则执行后面的代码。

应用二

User user = new User();
user = Optional.ofNullable(user).orElseGet(User::new);

假如说传入对象为空,那么要怎么做呢?——调用orElseGet函数在创建一个,或者做一些其他操作。

应用三

  User user = new User();
user.setAddress("河北省");
 Optional.ofNullable(user).map(User::getAddress).ifPresent(System.out::println);

假如说要调用传入对象的内部对象呢?比如上面的例子调用地址,但是地址万一也是空的呢。使用map函数调用,如果内部调用为空则也返回为空值。这样在外面在调用ifPresent去做非空操作

应用四


Optional.ofNullable(user)
        .filter(user1 -> "河北省".equals(user1.getAddress()))
        .orElseGet(()->{
            User u = new User();
            u.setAddress("河北省");
            return u;

        });

这里加了一个过滤器,假如传入地址为期望的地址,则放行。假如说传入的user的地址不是希望的位置,则执行orElseGet里面实现的方法。。。。。这里只是举个小栗子,不是一定要这种格式再写。等我多使用使用再完善这篇文章吧。。


下一篇 Spring事务