Optional 用法
Optional 类的引入很好的解决空指针异常,它可以保存类型T的值,或者仅仅保存null;
下面讲解常见用法
1:ofNullable
括号里面是否为null 为null则设置新对象
2:orElse
前面ofNullable括号里面是否 为null 为null则新建对象
3:ifPresent
前面ofNullable括号里面是否 不为null 不为null则执行方法
4:filter
前面ofNullable括号里面是否 不为null 则进行对比 不正确则设置原对象变为新对象
Optional optional = Optional.ofNullable(null);
Object object = Optional.ofNullable(null);
Optional源码分析:
public static <T> Optional<T> ofNullable(T value) {
return value == null ? empty() : of(value);
}
public static<T> Optional<T> empty() {
Optional<T> t = (Optional<T>) new Optional<>();
return t;
}
public static <T> Optional<T> of(T value) {
return new Optional<>(value);
}
Person person = new Person();
person.setName("HeSuiJin");
Object personTemp2 = Optional.ofNullable(null).orElse(new Person());
log.info("我是Person啊:{}", JSONObject.toJSONString(personTemp2));
Object personTemp1 = Optional.ofNullable(person).orElse(new Person());
log.info("我是Person啊:{}", JSONObject.toJSONString(personTemp1));
Optional源码分析:orElse
public T orElse(T other) {
return value != null ? value : other;
}
Optional.ofNullable(person).ifPresent(
a-> System.out.println(JSONObject.toJSONString(a))
);
Optional源码分析:ifPresent
public void ifPresent(Consumer<? super T> consumer) {
if (value != null)
consumer.accept(value);
}
Optional<Person> person = Optional.ofNullable(person).filter(
a -> "我的名字".equals(a.getName())
);
Optional源码分析:filter
public Optional<T> filter(Predicate<? super T> predicate) {
Objects.requireNonNull(predicate);
if (!isPresent())
return this;
else
return predicate.test(value) ? this : empty();
}