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

net.neoremind.fountain.Either Maven / Gradle / Ivy

package net.neoremind.fountain;

/**
 * 一个“非A即B”的抽象工具类。
 * 

* 用于提供默认值,当满足一定条件的是否才返回指定的对象的场景,可以做到链式调用,可读性性很强 * * @author zhangxu */ public class Either { /** * 默认值 */ private T defaultValue; /** * 条件验证,满足是否不返回默认值,返回指定值 */ private ClosurePredicate predicate; /** * 禁止直接构造 */ private Either() { } /** * 传入默认值的构造方法 * * @param defaultValue 默认值 */ public Either(T defaultValue) { this.defaultValue = defaultValue; } /** * 传入默认值的静态构造方法 * * @param defaultValue 默认值 * @param 默认值类型 * * @return Either本身 */ public static Either or(T defaultValue) { return new Either(defaultValue); } /** * 从一个可为空的对象来构造,当为空时放回默认值{@link #defaultValue},否则返回传入的值{@code t} * * @param t 传入对象 * * @return 返回对象 */ public T fromNullable(T t) { if (t == null) { return defaultValue; } else { return t; } } /** * 如果满足条件验证,惰性求值,仅先保存条件 * * @param predicate 条件验证 * * @return Either本身 */ public Either ifApply(ClosurePredicate predicate) { this.predicate = predicate; return this; } /** * 配合{@link #ifApply(ClosurePredicate)}使用,如果条件验证不为空并且返回true,则返回{@code t},否则返回默认值{@link #defaultValue} * * @param t 传入对象 * * @return 返回对象 */ public T thenReturn(T t) { if (predicate != null) { if (predicate.apply()) { return t; } } return defaultValue; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy