Optional类是Java8为了解决null值判断问题,使用Optional类可以避免显式的null值判断(null的防御性检查)
这是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。
代码示例
of 和 ofNullable
of方法通过工厂方法创建Optional类。需要注意的是,创建对象时传入的参数不能为null。如果传入参数为null,则抛出NullPointerException 。
ofNullable为指定的值创建一个Optional,如果指定的值为null,则返回一个空的Optional。
//调用工厂方法创建Optional实例
Optional<String> name = Optional.of("Yoda");
//传入参数为null,抛出NullPointerException.
Optional<String> someNull = Optional.of(null);
//下面创建了一个不包含任何值的Optional实例
Optional empty = Optional.ofNullable(null);
Optional<String> empty = Optional.empty();
isPresent和ifPresent
isPresent如果值存在返回true,否则返回false。
ifPresent如果Optional实例有值则为其调用consumer,否则不做处理
//isPresent方法用来检查Optional实例中是否包含值
if (name.isPresent()) {
//在Optional实例内调用get()返回已存在的值
System.out.println(name.get());//输出Yoda
}
//ifPresent方法接受lambda表达式作为参数。
//lambda表达式对Optional的值调用consumer进行处理。
optional.ifPresent(s -> {
s = s + "S";
log.debug(s);
});
log.debug(optional.get());