package tc.oc.commons.core.concurrent; import javax.annotation.Nullable; import tc.oc.commons.core.exception.ExceptionHandler; import tc.oc.commons.core.util.StackTrace; import tc.oc.commons.core.util.ThrowingRunnable; @FunctionalInterface public interface ExceptionHandlingExecutor extends CatchingExecutor { ExceptionHandler exceptionHandler(); default void executeThrows(ThrowingRunnable<?> command, @Nullable StackTrace source) throws Throwable { command.runThrows(); } @Override default void executeCatch(ThrowingRunnable<?> command, @Nullable StackTrace source) { try { executeThrows(command, source); } catch(Throwable t) { exceptionHandler().handleException(t, command, source); } } }