学习 Java 8 Optional,总结一下,方便自己以后的学习查看
新建 OptionalDemo01
import lombok.extern.slf4j.Slf4j;
import java.util.Optional;
/**
* Optional 类的引入很好的解决空指针异常。
* ofNullable()
* ifPresent()
* orElse()
* orElseGet()
*
*/
@Slf4j
public class OptionalDemo01 {
public static void main(String[] args) {
OptionalDemo01 optionalDemo01 = new OptionalDemo01();
// optionalDemo01.test01();
optionalDemo01.test02();
}
/**
* ifPresent
*/
public void test01(){
OptionalUser optionalUser = null;
// OptionalUser optionalUser = new OptionalUser("1234", "张三");
// 如果对象即可能是 null 也可能是非 null,你就应该使用 ofNullable() 方法:
// 如果为非空,返回 Optional 描述的指定值,否则返回空的 Optional。
Optional<OptionalUser> opt = Optional.ofNullable(optionalUser);
// 如果值存在则方法会返回true,否则返回 false。
// boolean present = opt.isPresent();
// 只有 user 用户不为 null 的时候才会执行 Consumer<? super T> consumer
opt.ifPresent(user -> {
log.info("非空的情况下,对象:" + user);
});
}
/**
* Optional 类提供了 API 用以返回对象值,或者在对象为空的时候返回默认值。
* T orElse(T other)
* orElseGet(Supplier<? extends T> other)
*/
public void test02(){
OptionalUser optionalUser = null;
// OptionalUser optionalUser = new OptionalUser("4321", "李四");
Optional<OptionalUser> opt = Optional.ofNullable(optionalUser);
// 如果存在该值,返回值, 否则返回 other。 T orElse(T other)
// orElse() 当opt不为空, 仍然会创建对象
OptionalUser optionalUser03 = opt.orElse(new OptionalUser("1234", "张三"));
log.info("optionalUser03:" + optionalUser03);
// orElseGet 当 orElseGet 不为空,不会去创建对象
OptionalUser optionalUser04 = opt.orElseGet(() -> {
return new OptionalUser("1234", "张三");
});
log.info("optionalUser04:" + optionalUser04);
}
}