Java8新特性Optional用法学习笔记
Optional是一个值为null的容器对象,它可以保存类型为T的值,或者仅仅保存null,它是在Java8之后提供的为了简化空值判断并解决NPE(Null Pointer Exception 空指针异常)的类,它提供了很多实用的方法来判断值是否存在。
环境
jdk:jdk1.8.0_51 框架:springBoot
空指针异常
在java8之前,我们再调用一个对象时,如果不确定它是否不为null,都需要通过
if(user!=null)
来判断对象是否不为null,如果不判断,就很容易引发空指针异常导致项目报错。例:
SysUser user = userService.getUser(Long userId); String userName = user.getUserName();
当不确定getUser()方法是否返回null时,为了避免以上代码报空指针异常,我们需要进行判断
SysUser user = userService.getUser(Long userId); String userName=null; if(user!=null){ userName = user.getUserName(); }
而在Java8中使用Optional简化了这一判断
Optional基本判空操作
-
首先我们使用Optional处理上方判断
SysUser sysUser = userService.selectUserById(userId); String userName = Optional.ofNullable(sysUser).orElse(new SysUser()).getUserName();
ofNullable():如果参数为空时,创建一个空Optional对象;不为空时,创建有参Optional对象 orElse():如果Optional对象为空,则返回该方法入参;如果非空,则返回Optional写入的对象
-
使用lambda表达式将sysUser的值赋给user
SysUser sysUser = userService.selectUserById(userId); SysUser user = new SysUser(); Optional<SysUser> userOptional = Optional.ofNullable(sysUser); userOptional.ifPresent(u-> { user.setUserName(u.getUserName()); });
Optional详解
下面详细记录一下Optional的用法
1、Optional对象创建
这里引用一下中提取的Optional源码注解
public final class Optional<T> { private static final Optional<?> EMPTY = new Optional<>(); private final T value; //我们可以看到两个构造方法都是private私有的 //说明 我们没办法在外面去new出来Optional对象 private Optional() { this.value = null; } private Optional(T value) { this.value = Objects.requireNonNull(value); } //创建出一个包装值为空的Optional对象,因为没有任何参数赋值 public static<T> Optional<T> empty() { @SuppressWarnings("unchecked") Optional<T> t = (Optional<T>) EMPTY; return t; } //创建出一个包装值非空的Optional对象,因为做了赋值 public static <T> Optional<T> of(T value) { return new Optional<>(value); } // 如果参数value为空,则创建空对象,如果不为空,则创建有参对象 public static <T> Optional<T> ofNullable(T value) { return value == null ? empty() : of(value); } }
再做一个简单的实例展示 与上面对应
// 1、创建一个包装对象值为空的Optional对象 Optional<String> optEmpty = Optional.empty(); // 2、创建包装对象值非空的Optional对象 Optional<String> optOf = Optional.of("optional"); // 3、创建包装对象值允许为空也可以不为空的Optional对象 Optional<String> optOfNullable1 = Optional.ofNullable(null); Optional<String> optOfNullable2 = Optional.ofNullable("optional");
2、Optional常用方法介绍
以下内容都引用了的介绍,里面写的很详细,在此不多做说明。
联系方式
邮箱:Evernight@aliyun.com
以上内容有不正确的地方烦请指正!🙏🙏🙏