java8的Optional的作用

1,202 阅读1分钟

java8引入Optional是为了杜绝NullPointerException,从而开发出更优雅的代码,不用频繁判断所要使用的对象是否为空。

例子1

以前写法:

public String getCity(User user) throws Exception{
  if(user!=null){
   if(user.getAddress()!=null){
    Address address = user.getAddress();
    if(address.getCity()!=null){
     return address.getCity();
    }
   }
  }
  throw new Excpetion("取值错误"); 
 }

使用Optional:

public String getCity(User user) throws Exception{
 return Optional.ofNullable(user)
     .map(u-> u.getAddress())
     .map(a->a.getCity())
     .orElseThrow(()->new Exception("取指错误"));
}

例子2

以前写法:

if(user!=null){
 dosomething(user);
}

使用Optional:

Optional.ofNullable(user)
  .ifPresent(u->{
  dosomething(u);
  });

例子3

以前写法:

public User getUser(User user) throws Exception{
 if(user!=null){
  String name = user.getName();
  if("zhangsan".equals(name)){
   return user;
  }
 }else{
  user = new User();
  user.setName("zhangsan");
  return user;
 }
}

使用Optional:


public User getUser(User user) {
 return Optional.ofNullable(user)
     .filter(u->"zhangsan".equals(u.getName()))
     .orElseGet(()-> {
      User user1 = new User();
      user1.setName("zhangsan");
      return user1;
     });
}