All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.geektool.core.bean.OptionalBean Maven / Gradle / Ivy

package cn.geektool.core.bean;

import cn.geektool.core.lang.Assert;
import cn.geektool.core.util.ObjectUtil;

import java.util.Objects;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;

/**
 * optional对象判空,参考:https://mp.weixin.qq.com/s/0c8iC0OTtx5LqPkhvkK0tw
* from:https://github.com/looly/hutool/pull/1182 * * @param Bean类型 * @author totalo * @since 5.4.7 */ public final class OptionalBean { private static final OptionalBean EMPTY = new OptionalBean<>(); /** * 空值常量 * * @param 对象类型 * @return 空 */ public static OptionalBean empty() { @SuppressWarnings("unchecked") OptionalBean none = (OptionalBean) EMPTY; return none; } private final T value; /** * 构造 */ private OptionalBean() { this.value = null; } /** * 空值会抛出空指针 * * @param value Bean值 */ private OptionalBean(T value) { this.value = Objects.requireNonNull(value); } /** * 包装一个不能为空的 bean * * @param bean类型 * @param value Bean值 * @return OptionalBean */ public static OptionalBean of(T value) { return new OptionalBean<>(value); } /** * 包装一个可能为空的 bean * * @param value Bean值 * @param bean类型 * @return OptionalBean */ public static OptionalBean ofNullable(T value) { return value == null ? empty() : of(value); } /** * 取出具体的值 * * @return bean值 */ public T get() { return value; } /** * 取出一个可能为空的对象 * * @param 对象类型 * @param fn 从已有bean中获取新bean字段的函数 * @return 新的bean */ public OptionalBean getBean(Function fn) { return Objects.isNull(value) ? OptionalBean.empty() : OptionalBean.ofNullable(fn.apply(value)); } /** * 如果目标值为空 获取一个默认值 * * @param other 默认值 * @return 空返回默认值,否则返回原值 */ public T orElse(T other) { return ObjectUtil.defaultIfNull(this.value, other); } /** * 如果目标值为空 通过lambda表达式获取一个值 * * @param other 默认值函数 * @return 空返回默认值函数获得的值,否则返回原值 */ public T orElseGet(Supplier other) { return null != value ? value : other.get(); } /** * 如果目标值为空 抛出一个异常 * * @param exceptionSupplier 抛出的异常 * @param 异常类型 * @return 非空值 * @throws X 对象为空时抛出的异常 */ public T orElseThrow(Supplier exceptionSupplier) throws X { return Assert.notNull(this.value, exceptionSupplier); } /** * 检查值是否为空 * * @return 是否为空 */ public boolean isPresent() { return null != this.value; } /** * 如果值非空,则使用指定函数处理值 * * @param consumer 处理非空对象的函数 */ public void ifPresent(Consumer consumer) { if (value != null) { consumer.accept(value); } } @Override public int hashCode() { return Objects.hashCode(value); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy