java 8 代替 null 的类 Optional
来源:互联网 发布:python遗传算法 编辑:程序博客网 时间:2024/06/16 12:06
这个返回值类型,其中有个是 Optional 类。
这个类是从Java 8 开始,才有的。他就是为了防止出现空值,也就是null。
Optional. 可以优雅的解决 NullPointException 的问题,
以前这样写:
User user = …..
if (user != null) {
return user.getOrders();
} else {
return Collections.emptyList();
}
新类可以写成:
Optional<User> user = ……
if (user.isPresent()) {
return user.getOrders();
} else {
return Collections.emptyList();
}
而上面的写法是不推荐使用的。
构造器:
Optional.of(obj)
要求传入的 obj 不能是 null 值,否则就报 NullPointerException 异常了。
Optional.ofNullable(obj)
对参数宽容,null 否都可
null 就得到 Optional.empty()
非 null 就是 Optional.of(obj)
Optional.empty()
新的写法:
return user.map(u -> u.getOrders()).orElse(Collections.emptyList())
//上面避免了我们类似 Java 8 之前的做法
if(user.isPresent()) {
return user.get().getOrders();
} else {
return Collections.emptyList();
}
存在即返回,没有则由方法产生:
return user.orElseGet(() -> fetchAUserFromDatabase()); //而不要 return user.isPresent() ? user: fetchAUserFromDatabase();
map 是可能无限级联的, 比如再深一层, 获得用户名的大写形式
return user.map(u -> u.getUsername())
.map(name -> name.toUpperCase())
.orElse(null);
这要搁在以前, 每一级调用的展开都需要放一个 null 值的判断
User user = .....
if(user != null) {
String name = user.getUsername();
if(name != null) {
return name.toUpperCase();
} else {
return null;
}
} else {
return null;
}
Optional 是不是语法糖?
语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。
是的,Lambda表达式的本质只是一个"语法糖"
相关:
http://www.importnew.com/22060.html
阅读全文
0 0
- java 8 代替 null 的类 Optional
- Java 8的Optional类
- java 8 Optional类
- 利用Java 8 Optional 来进行null处理
- java 8(三)--用Optional取代null
- Optional优雅的使用null
- Java 8 Optional 类 学习
- 使用 Java 8 Optional 的正确姿势
- 使用java 8 Optional 的正确姿势
- Java 8 Optional的正确姿势
- Guava 避免null-Optional的使用方法
- Guava Optional 和 Java 8 optional
- Java 8 Optional类深度解析
- Java 8 Optional类深度解析
- Java 8 Optional类深度解析
- Java 8 Optional类深度解析
- Java 8 Optional类深度解析
- Java 8 Optional类深度解析
- python 第二课
- 【vjudge】八数码问题
- Hadoop2.9.0安装与配置 免密登录配置
- Server Tomcat v7.0 Server at localhost failed to start.分析解决办法
- SSL证书与发起https请求获取结果
- java 8 代替 null 的类 Optional
- Apex代码优化01
- sram sdram prom eprom eeprom norflash norfalsh pflash区别
- 开发即时通信是选择UDP还是TCP协议
- sql查询语句执行顺序详解
- 关于远程登录mysql5.7服务器没有权限的问题
- 选择排序-c++代码实现
- printf()和scanf()的*修饰符
- 《STK二次开发 C++版》S1:STK介绍