diff --git a/hutool-core/src/main/java/cn/hutool/core/exceptions/CheckedUtil.java b/hutool-core/src/main/java/cn/hutool/core/exceptions/CheckedUtil.java index f1380a2d0..3b76d8a78 100644 --- a/hutool-core/src/main/java/cn/hutool/core/exceptions/CheckedUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/exceptions/CheckedUtil.java @@ -145,6 +145,31 @@ public class CheckedUtil { }; } + /** + * 接收一个可以转化成 cn.hutool.core.lang.func.Func的Lambda表达式,和一个可以把Exception转化成RuntimeExceptionde的表达式,当执行表达式抛出任何异常的时候,都会转化成运行时异常 + * 如此一来,代码中就不用显示的try-catch转化成运行时异常 + * + * @param expression Lambda表达式 + * @param rteSupplier 转化运行时异常的表达式 + * @param

运行时传入的参数类型 + * @param 最终返回的数据类型 + * @return {@link FuncRt} + */ + public static FuncRt uncheck(Func expression, Supplier1 rteSupplier) { + Objects.requireNonNull(expression, "expression can not be null"); + return t -> { + try { + return expression.call(t); + } catch (Exception e) { + if (rteSupplier == null) { + throw new RuntimeException(e); + } else { + throw rteSupplier.get(e); + } + } + }; + } + /** * 接收一个可以转化成 cn.hutool.core.lang.func.Func0的Lambda表达式,和一个RuntimeException,当执行表达式抛出任何异常的时候,都会转化成运行时异常 * 如此一来,代码中就不用显示的try-catch转化成运行时异常 @@ -170,6 +195,30 @@ public class CheckedUtil { }; } + /** + * 接收一个可以转化成 cn.hutool.core.lang.func.Func0的Lambda表达式,和一个可以把Exception转化成RuntimeExceptionde的表达式,当执行表达式抛出任何异常的时候,都会转化成运行时异常 + * 如此一来,代码中就不用显示的try-catch转化成运行时异常 + * + * @param expression Lambda表达式 + * @param rteSupplier 转化运行时异常的表达式 + * @param 最终返回的数据类型 + * @return {@link Func0Rt} + */ + public static Func0Rt uncheck(Func0 expression, Supplier1 rteSupplier) { + Objects.requireNonNull(expression, "expression can not be null"); + return () -> { + try { + return expression.call(); + } catch (Exception e) { + if (rteSupplier == null) { + throw new RuntimeException(e); + } else { + throw rteSupplier.get(e); + } + } + }; + } + /** * 接收一个可以转化成 cn.hutool.core.lang.func.Func1的Lambda表达式,和一个RuntimeException,当执行表达式抛出任何异常的时候,都会转化成运行时异常 * 如此一来,代码中就不用显示的try-catch转化成运行时异常 @@ -197,7 +246,32 @@ public class CheckedUtil { } /** - * 接收一个可以转化成 cn.hutool.core.lang.func.VoidFunc的Lambda表达式,和一个RuntimeException,当执行表达式抛出任何异常的时候,都会转化成运行时异常 + * 接收一个可以转化成 cn.hutool.core.lang.func.Func1的Lambda表达式,和一个可以把Exception转化成RuntimeExceptionde的表达式,当执行表达式抛出任何异常的时候,都会转化成运行时异常 + * 如此一来,代码中就不用显示的try-catch转化成运行时异常 + * + * @param expression Lambda表达式 + * @param rteSupplier 转化运行时异常的表达式 + * @param

运行时传入的参数类型 + * @param 最终返回的数据类型 + * @return {@link Func1Rt} + */ + public static Func1Rt uncheck(Func1 expression, Supplier1 rteSupplier) { + Objects.requireNonNull(expression, "expression can not be null"); + return t -> { + try { + return expression.call(t); + } catch (Exception e) { + if (rteSupplier == null) { + throw new RuntimeException(e); + } else { + throw rteSupplier.get(e); + } + } + }; + } + + /** + * 接收一个可以转化成 cn.hutool.core.lang.func.VoidFunc的Lambda表达式,和一个可以把Exception转化成RuntimeExceptionde的表达式,当执行表达式抛出任何异常的时候,都会转化成运行时异常 * 如此一来,代码中就不用显示的try-catch转化成运行时异常 * * @param expression Lambda表达式 @@ -221,6 +295,30 @@ public class CheckedUtil { }; } + /** + * 接收一个可以转化成 cn.hutool.core.lang.func.VoidFunc的Lambda表达式,和一个可以把Exception转化成RuntimeExceptionde的表达式,当执行表达式抛出任何异常的时候,都会转化成运行时异常 + * 如此一来,代码中就不用显示的try-catch转化成运行时异常 + * + * @param expression Lambda表达式 + * @param rteSupplier 转化运行时异常的表达式 + * @param

运行时传入的参数类型 + * @return {@link VoidFuncRt} + */ + public static

VoidFuncRt

uncheck(VoidFunc

expression, Supplier1 rteSupplier) { + Objects.requireNonNull(expression, "expression can not be null"); + return t -> { + try { + expression.call(t); + } catch (Exception e) { + if (rteSupplier == null) { + throw new RuntimeException(e); + } else { + throw rteSupplier.get(e); + } + } + }; + } + /** * 接收一个可以转化成 cn.hutool.core.lang.func.VoidFunc0的Lambda表达式,和一个RuntimeException,当执行表达式抛出任何异常的时候,都会转化成运行时异常 @@ -246,6 +344,29 @@ public class CheckedUtil { }; } + /** + * 接收一个可以转化成 cn.hutool.core.lang.func.VoidFunc0的Lambda表达式,和一个可以把Exception转化成RuntimeExceptionde的表达式,当执行表达式抛出任何异常的时候,都会转化成运行时异常 + * 如此一来,代码中就不用显示的try-catch转化成运行时异常 + * + * @param expression Lambda表达式 + * @param rteSupplier 转化运行时异常的表达式 + * @return {@link VoidFunc0Rt} + */ + public static VoidFunc0Rt uncheck(VoidFunc0 expression, Supplier1 rteSupplier) { + Objects.requireNonNull(expression, "expression can not be null"); + return () -> { + try { + expression.call(); + } catch (Exception e) { + if (rteSupplier == null) { + throw new RuntimeException(e); + } else { + throw rteSupplier.get(e); + } + } + }; + } + /** * 接收一个可以转化成 cn.hutool.core.lang.func.VoidFunc1的Lambda表达式,和一个RuntimeException,当执行表达式抛出任何异常的时候,都会转化成运行时异常 @@ -272,29 +393,57 @@ public class CheckedUtil { }; } + /** + * 接收一个可以转化成 cn.hutool.core.lang.func.VoidFunc1的Lambda表达式,和一个RuntimeException,当执行表达式抛出任何异常的时候,都会转化成运行时异常 + * 如此一来,代码中就不用显示的try-catch转化成运行时异常 + * + * @param expression Lambda表达式 + * @param rteSupplier 转化运行时异常的表达式 + * @param

运行时传入的参数类型 + * @return {@link VoidFunc1Rt} + */ + public static

VoidFunc1Rt

uncheck(VoidFunc1

expression, Supplier1 rteSupplier) { + Objects.requireNonNull(expression, "expression can not be null"); + return t -> { + try { + expression.call(t); + } catch (Exception e) { + if (rteSupplier == null) { + throw new RuntimeException(e); + } else { + throw rteSupplier.get(e); + } + } + }; + } + public interface FuncRt extends Func { - @SuppressWarnings("unchecked") + @Override R call(P... parameters) throws RuntimeException; } public interface Func0Rt extends Func0 { + @Override R call() throws RuntimeException; } public interface Func1Rt extends Func1 { + @Override R call(P parameter) throws RuntimeException; } public interface VoidFuncRt

extends VoidFunc

{ - @SuppressWarnings("unchecked") + @Override void call(P... parameters) throws RuntimeException; } public interface VoidFunc0Rt extends VoidFunc0 { + @Override void call() throws RuntimeException; } public interface VoidFunc1Rt

extends VoidFunc1

{ + @Override void call(P parameter) throws RuntimeException; }