Example Analysis of Optional with New Features of java8
这篇文章主要介绍了java8新特性之Optional的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
本文以jdk1.8.0_111源码为例
public final class Optional {}
Optional是一个为了解决NullPointerException设计而生可以包含对象也可以包含空的容器对象。封装了很多对空处理的方法也增加了filter、map这样的检索利器,其中函数式编程会有种炫酷到爆的感觉。
基础测试用例对象:
public class Java8OptionalTest { List stringList = null; ICar car = new WeiLaiCar();}public class WeiLaiCar implements ICar { Integer wheels = new Integer(4);}
Api中提供的4种optional
最核心的当属Optional对象,泛型的引入支持了所有对象类型,又增加对常用场景下的dubbo\int\long进行扩展。重点介绍一下Optional对象的方法其他三个类似。
public final class Optional {
public final class OptionalDouble {
public final class OptionalInt {
public final class OptionalLong {
@FunctionalInterface
Predicate\Consumer\Supplier三个接口都是函数式接口
静态方法of
private Optional() { this.value = null;}
构造方法被private,不能new但提供了of这样的静态方法去初始化类;
public static Optional of(T value) { return new Optional(value);}public static Optional ofNullable(T value) { return value == null ? empty() : of(value);}public static Optional empty() { @SuppressWarnings("unchecked") Optional t = (Optional) EMPTY; return t;}
1、empty支持你去创建一个空的optional类,这样的类直接get()会报错:java.util.NoSuchElementException: No value present
2、of(x)传入的对象不能为null,而ofNullable(x)是支持传入null的对象,一般用这两个比较多。
present 方法
isPresent是用来判断optional中对象是否为null,ifPresent的参数是当对象不为null时执行的lamdba表达式。
public boolean isPresent() { return value != null;}public void ifPresent(Consumer