如何实现支持泛型的布尔校验全局静态方法,适配任意类型对象条件修改
泛型校验转换方法实现
要实现先做布尔校验、校验通过执行自定义修改、不通过返回原值的通用泛型方法,首先要注意:如果需要方法自动返回原始对象,必须把原始对象作为入参传入,更推荐使用无副作用的三参数实现,适配所有引用类型:
public static <T> T booleanCheck(T originVal, Predicate<T> checkCondition, Function<T, T> modifyLogic) { if (checkCondition.test(originVal)) { return modifyLogic.apply(originVal); } return originVal; }
调用方式和你给出的示例逻辑完全匹配:
final String text = "test"; // 校验字符串非空就执行截取 final String newText = booleanCheck(text, s -> !s.isEmpty(), s -> s.substring(1)); // 输出结果为 tes
如果一定要用两参数版本,需要在lambda中捕获外部原始对象,实现如下:
public static <T> T booleanCheck(boolean condition, Supplier<T> modifyLogic) { return condition ? modifyLogic.get() : null; }
调用时需要自己处理校验不通过时返回原值的逻辑:
final String text = "test"; final String newText = Optional.ofNullable(booleanCheck(!text.isEmpty(), () -> text.substring(1))).orElse(text);
这种写法不如三参数版本简洁,也更容易出现变量捕获的问题,不推荐使用。
注意:你示例代码中的subString拼写有误,Java 字符串截取方法是小写开头的substring。
内容的提问来源于stack exchange,提问作者Girls are beautiful
相关产品推荐
相关产品推荐

