Optional类是Java8的新特性,是一个可以为null的容器对象
Optional就像一个壳子,里面包住了一个对象
使用方法 | 描述 |
---|---|
Optional.of(object) | 传递参数,如果of中的对象是null,就报空指针异常(用于创建optional对象) |
Optional.ofNullable(object) | 允许ofNullable传递null对象(用于创建optional对象) |
Optional.empty() | 返回空的Optional实例 (用于创建optional对象) |
Optional.isPresent() | 判断Optional实例是否为空 |
Optional.orElse(Object) | 如果optional为空的话返回orElse中的对象 |
Optional.get() | 获取optional中的T对象 |
Optional.map() | 如果optional不为null,则执行map方法中的映射函数得到返回值。 |
案例一:替代多层if else嵌套
// 比如 一个数据有三层,我在取最里层的时候,要判断每一层的是否为空,这样就会出现大量if else嵌套
// 这个方法传入一个 map类型的对象叫 resultMap
// 如果resultMap为空,直接返回 orElse中的内容,如果map中取得值,有一步为空,那也返回orElse中的内容
String address = Optional.ofNullable(resultMap)
.map( m -> (Map<String,Object>)m.get("user") )
.map( user -> (Map<String,Object>)m.get("info") )
.map( info->(Map<String,Object>)m.get("address"))
.orElse(null);
System.out.println(address);
//还有一个抛异常的, 为null的时候抛异常
Optional.ofNullable(resultMap)
.map( m->(Map<String,Object>)m.get("user"))
.map( user->(Map<String,Object>)m.get("info"))
.map( info->(Map<String,Object>)m.get("address"))
.orElseThrow(() -> new Exception());
案例二:判断一个对象是否为空,若为空,则创建一个新对象
User user = null;
Optional.ofNullable(user).orElse(new User());
案例三:通过ifPresent()判断一个对象是否为空
// 返回ture false
Optional.ofNullable(user).isPresent();
// 不为空,进行一些操作
Optional.ofNullable(porder).ifPresent(s -> {
param.put("porder", Integer.parseInt(s));
});