Java8 Optional的使用及方法介绍
程序员文章站
2022-07-10 17:58:34
Java8 Optional** Optional主要是为了去除java.lang.NullPointerException (NPE) 空指针异常**Optional:该类是的构造方式是private(私有构造),大体讲解一下几个常用的方法。of方法是一个静态方法,用于创作Optional对象,他的参数必须是一个明确非null的值。 // of: 方法是明确参数不是null Optional optional = Option...
Java8 Optional
** Optional主要是为了去除java.lang.NullPointerException (NPE) 空指针异常**
Optional:
该类是的构造方式是private(私有构造),大体讲解一下几个常用的方法。
- of方法
是一个静态方法,用于创作Optional对象,他的参数必须是一个明确非null的值。
// of: 方法是明确参数不是null
Optional<String> 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 <T> Optional<T> 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<String> optional1 = Optional.empty();
if (optional.isPresent()) {
// 输出结果为空(什么都没有)
System.out.println(optional.get());
}
// 建议
optional1.ifPresent(System.out::println);
empty源码:
public static<T> Optional<T> empty() {
@SuppressWarnings("unchecked")
Optional<T> t = (Optional<T>) 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<String> 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 <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X {
if (value != null) {
return value;
} else {
throw exceptionSupplier.get();
}
}
- ofNullable
他与of方法和ofNullable方法相似是一个静态方法,也用于创作Optional对象,但是他参数,可以是null也是以不是null。
Optional<String> optional = Optional.ofNullable("hello");
ofNullable源码:
public static <T> Optional<T> ofNullable(T value) {
return value == null ? empty() : of(value);
}
本文地址:https://blog.csdn.net/weixin_43939924/article/details/110262825
上一篇: 【Java用法】Java 过滤html标签获取纯文本信息
下一篇: 入门:单反拍出诱人美食的几个技巧
推荐阅读