Java中的Optional类详细解读
1 前言
Optional 是 Java 8 的新特性,专治空指针异常(NullPointerException, 简称 NPE)问题,它是一个容器类,里面只存储一个元素(这点不同于 Conllection)。
为方便用户通过 Lambda 表达式调用 Optional 的方法,部分方法(如:filter、ifPresent、map、orElseGet)需传入函数式接口
(如:Predicate、Consumer、Function、Supplier)参数。
2 主要属性及构造方法
类定义
Optional 类位于 java.util 包中,类定义如下:
//T 为元素数据类型 public final class Optional<T>
主要属性
//空容器 private static final Optional<?> EMPTY = new Optional<>(); //value 存储容器内唯一元素 private final T value;
构造方法
//无参构造方法:this.value = null private Optional() //有参构造方法(value不允许为空):this.value = Objects.requireNonNull(value) private Optional(T value)
3 常用方法
创建容器(empty、of、ofNullable)
//创建空容器:return (Optional<T>) EMPTY public static<T> Optional<T> empty() //创建容器(value不允许为空):return new Optional<>(value) public static <T> Optional<T> of(T value) //创建容器(value允许为空):return value == null ? empty() : of(value) public static <T> Optional<T> ofNullable(T value)
容器判空(isPresent)
//判断容器是否为空:return value != null public boolean isPresent() //判断容器是否为空,若不为空,消费元素 public void ifPresent(Consumer<? super T> consumer) { if (value != null) consumer.accept(value); }
应用:
Optional<User> op = Optional.of(new User("张三", 20)); op.ifPresent(user -> System.out.println(user)); //op.ifPresent(System.out::println);
获取元素(get、orElse、orElseGet)
//获取容器中唯一元素:return value public T get() //获取容器唯一元素,若为空,返回指定值:return value != null ? value : other public T orElse(T other) //获取容器唯一元素,若为空,返回供应者(Supplier)提供的元素 public T orElseGet(Supplier<? extends T> other) { return value != null ? value : other.get(); }
应用:
Optional<User> op = Optional.ofNullable(null); User user = op.orElseGet(() -> new User("张三", 20));
筛选元素(filter)
//过滤不符合断言(Predicate)的元素 public Optional<T> filter(Predicate<? super T> predicate) { Objects.requireNonNull(predicate); if (!isPresent()) return this; else return predicate.test(value) ? this : empty(); }
应用:
Optional<User> op = Optional.of(new User("张三", 20)); Optional<User> op2 = op.filter(user -> user.age > 18);
映射元素(map)
//将 T 类型元素映射为 U 类型元素 public<U> Optional<U> map(Function<? super T, ? extends U> mapper) { Objects.requireNonNull(mapper); if (!isPresent()) return empty(); else { return Optional.ofNullable(mapper.apply(value)); } }
应用:
Optional<String> op = Optional.of(new String("12345")); Optional<Integer> op2 = op.map(str -> { try { return Integer.parseInt(str); } catch (Exception e) { return -1; } });
到此这篇关于Java中的Optional类详细解读的文章就介绍到这了,更多相关Java的Optional类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
详解使用Spring的BeanPostProcessor优雅的实现工厂模式
这篇文章主要介绍了详解使用Spring的BeanPostProcessor优雅的实现工厂模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-07-07Java多线程事务回滚@Transactional失效处理方案
这篇文章主要介绍了Java多线程事务回滚@Transactional失效处理方案,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下2022-08-08java公众平台通用接口工具类HttpConnectUtil实例代码
下面小编就为大家分享一篇java公众平台通用接口工具类HttpConnectUtil实例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2018-01-01
最新评论