• 主页
  • 归档
  • 分类
  • 照片墙
所有文章 友情链接 关于我

  • 主页
  • 归档
  • 分类
  • 照片墙
目录,不存在的…

Optional

2018-06-14 21:51:16
总字数 374
预计阅读时间 1 分钟

java8新增了很多有用的api , Optional就是其中之一
首先它可以用来解决空指针的问题
让代码更加简洁 , 而不需要多层的判断

比如

1
2
3
4
5
6
7
8
9
10
class User {
private String username;
private Role role;
//getter与setter方法...
}

class Role {
private String rolename;
//getter与setter方法...
}

假如需要获取一个用户的角色名称 , 如果获取不到就返回”无角色”
在以往我们需要这么写

1
2
3
4
5
6
7
8
9
public static String getRoleName(User user) {
if(user != null &&
user.getRole() != null &&
user.getRole().getRolename()!=null) {
return user.getRole().getRolename();
} else {
return "无角色";
}
}

显然为了防止抛出NullPointerException , 需要进行多次判断
在Java8当中 , 配合lamdba表达式 , 可以使用函数式编程的风格让代码更优雅

1
2
3
4
5
6
public static String getRoleName2(User user) {
return Optional.ofNullable(user)
.map(u -> u.getRole())
.map(r -> r.getRolename())
.orElse("无角色");
}

直接调用Optional.of当然也是可以的 , 只不过如果最初的user就是null的话 , 还是会抛出NullPointerException
Optional.ofNullable它以一种宽容的方式来构造一个 Optional 实例. 来者不拒, 传 null 进到就得到 Optional.empty(), 非 null 就调用 Optional.of(obj)

以下摘自jdk1.8源码

1
2
3
public static <T> Optional<T> ofNullable(T value) {
return value == null ? empty() : of(value);
}

orElse代表链式调用当中如果出现空值 , 则返回该内容
同一个系列的还有

  • orElseGet - 执行某个方法 , 比如 .orElseGet( () -> getDefaultValue() )
  • orElseThrow - 抛出一个异常 , 比如 .orElseThrow( () -> new RuntimeException() )
  • Java

扫一扫,分享到微信

table-cell应用
重新认识display 
© 2024 夏夜梦星辰
鲁ICP备19028444号
Power By Hexo
  • 所有文章
  • 友情链接
  • 关于我
{{searchItem.query}}
标签: 分类:
  • maven
  • 持续集成
  • JMS
  • 线程
  • JavaScript
  • ECMAScript6
  • 单元测试
  • Promise
  • Web Worker
  • 函数
  • prototype
  • 模块化
  • 正则表达式
  • 数据库
  • MongoDB
  • 索引
  • 集群
  • 全文检索
  • flutter
  • dart
  • git
  • 版本控制
  • linux
  • shell
  • docker
  • nginx
  • jenkins
  • opencv
  • vim
  • react
  • react native
  • 前端
  • css
  • HTML5
  • Hexo
  • sass
  • Three.js
  • TypeScript
  • Vue
  • 组件化
  • base64
  • webpack
  • nodejs
  • gulp
  • TensorFlow
  • 机器学习
  • 算法
  • 动态规划
  • 数据结构
  • Java
  • JavaScript
  • MongoDB
  • flutter
  • Git
  • linux
  • react
  • 前端杂烩
  • 男生女生
  • 算法
  • 十年饮冰,难凉热血
  • †少女癌†
  • 猫与向日葵
  • coderfun
  • JENKINS
  • API管理后台
愿你最终能接纳每一面每一种的自己
独自活着便是团圆