总字数 374
预计阅读时间 1 分钟
java8新增了很多有用的api , Optional
就是其中之一
首先它可以用来解决空指针的问题
让代码更加简洁 , 而不需要多层的判断
比如
1 | class User { |
假如需要获取一个用户的角色名称 , 如果获取不到就返回”无角色”
在以往我们需要这么写
1 | public static String getRoleName(User user) { |
显然为了防止抛出NullPointerException , 需要进行多次判断
在Java8当中 , 配合lamdba表达式 , 可以使用函数式编程的风格让代码更优雅
1 | public static String getRoleName2(User user) { |
直接调用Optional.of
当然也是可以的 , 只不过如果最初的user就是null的话 , 还是会抛出NullPointerExceptionOptional.ofNullable
它以一种宽容的方式来构造一个 Optional 实例. 来者不拒, 传 null 进到就得到 Optional.empty(), 非 null 就调用 Optional.of(obj)
以下摘自jdk1.8源码
1 | public static <T> Optional<T> ofNullable(T value) { |
orElse
代表链式调用当中如果出现空值 , 则返回该内容
同一个系列的还有
orElseGet
- 执行某个方法 , 比如 .orElseGet( () -> getDefaultValue() )orElseThrow
- 抛出一个异常 , 比如 .orElseThrow( () -> new RuntimeException() )