default void accept(V1 v1, V2 v2) { runAction(() -> tryAccept(v1, v2)); }
/** * Unwrap an exception and rethrow. Useful to produce clean/shorter stacktraces. * * @param type Type to unwrap. * @param <TV1> Input type. * @param <TV2> Input type. * @param <X> Exception type. * @return A new consumer. */ default <TV1 extends V1, TV2 extends V2, X extends Throwable> Consumer2<TV1, TV2> unwrap( Class<X> type) { return (v1, v2) -> runUnwrap(() -> tryAccept(v1, v2), type); } }
/** * Execute the given action before throwing the exception. * * @param type Exception type filter. * @param action Action to execute. * @param <X> Exception type. * @param <TV1> Input type. * @param <TV2> Input type. * @return A new consumer with a listener action. */ default <TV1 extends V1, TV2 extends V2, X extends Throwable> Consumer2<TV1, TV2> onFailure( Class<? extends X> type, java.util.function.Consumer<X> action) { return (v1, v2) -> runOnFailure(() -> tryAccept(v1, v2), type, action); }
/** * Wrap an exception as new exception provided by the given wrap function. * * @param wrapper Wrap function. * @param <TV1> Input type. * @param <TV2> Input type. * @return A new consumer. */ default <TV1 extends V1, TV2 extends V2> Consumer2<TV1, TV2> wrap( java.util.function.Function<Throwable, Exception> wrapper) { return (v1, v2) -> runWrap(() -> tryAccept(v1, v2), wrapper); }