java optional 用法_Java8 Optional的使用及方法介绍
Java8 Optional
** Optional主要是为了去除java.lang.NullPointerException (NPE) 空指针异常**
Optional:
该类是的构造方式是private(私有构造),大体讲解一下几个常用的方法。
of方法
是一个静态方法,用于创作Optional对象,他的参数必须是一个明确非null的值。
// of: 方法是明确参数不是null
Optional optional = Optional.of("hello");
// 判空 不建议 ifPresent方法(无参): 返回的是一个boolean 值 不是null返回 true
if (optional.isPresent()) {
System.out.println(optional.get());
}
// 建议 结果: hello ifPresent方法(有参): 他的参数是一个Consumer函数式接口
// 不是null返回 执行Consumer#accept
optional.ifPresent(System.out::println);
of方法源码:
public static Optional of(T value) {
return new Optional<>(value);
}
isPresent
判读Optional对象是否为空。有一个重载方法。
isPresent(无参)源码:
返回的是一个boolean 值 不是null返回 true,反之返回false。
注: 不知道value是啥的请自行看看上面的构造方法截图。
public boolean isPresent() {
return value != null;
}
isPresent(有参)源码:
他的参数是一个Consumer函数式接口,不是null返回 执行Consumer#accept。
public void ifPresent(Consumer super T> consumer) {
if (value != null)
consumer.accept(value);
}
empty
他与of方法相似是一个静态方法,也用于创作Optional对象,但是他没有参数,创建的是一个空的Optional对象。
ptional optional1 = Optional.empty();
if (optional.isPresent()) {
// 输出结果为空(什么都没有)
System.out.println(optional.get());
}
// 建议
optional1.ifPresent(System.out::println);
empty源码:
public static Optional empty() {
@SuppressWarnings("unchecked")
Optional t = (Optional) EMPTY;
return t;
}
get
用于获取Optional对象中的的value。但是获取的时候最好还是isPresent判断一下
get源码:
public T get() {
if (value == null) {
throw new NoSuchElementException("No value present");
}
return value;
}
orElse
用于获取Optional对象中的的value。如果value为空则将orElse方法的参数(T 结果泛型)当做value。
Optional optional1 = Optional.empty();
// 结果就是value
System.out.println(optional1.orElse("world"));
orElse源码:
public T orElse(T other) {
return value != null ? value : other;
}
orElseGet
用于获取Optional对象中的的value。如果value为空则将orElseGet方法的参数是一个Supplier接口他的结果,当做value。
String supplier = optional1.orElseGet(() -> "Supplier");
orElseGet源码:
public T orElseGet(Supplier extends T> other) {
return value != null ? value : other.get();
}
orElseThrow
用于获取Optional对象中的的value。如果value为空则抛出异常。
String supplier1 = optional1.orElseThrow(() -> {
return new Exception();
});
System.out.println("supplier1 = " + supplier1);
orElseThrow源码:
public T orElseThrow(Supplier extends X> exceptionSupplier) throws X {
if (value != null) {
return value;
} else {
throw exceptionSupplier.get();
}
}
ofNullable
他与of方法和ofNullable方法相似是一个静态方法,也用于创作Optional对象,但是他参数,可以是null也是以不是null。
Optional optional = Optional.ofNullable("hello");
ofNullable源码:
public static Optional ofNullable(T value) {
return value == null ? empty() : of(value);
}
本文地址:https://blog.csdn.net/weixin_43939924/article/details/110262825
如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!