/** * Execute the given action before throwing the exception. * * @param action Action to execute. * @param <TV1> Input type. * @param <TV2> Input type. * @param <TV3> Input type. * @param <TV4> Input type. * @param <TV5> Input type. * @return A new consumer with a listener action. */ default <TV1 extends V1, TV2 extends V2, TV3 extends V3, TV4 extends V4, TV5 extends V5> Consumer5<TV1, TV2, TV3, TV4, TV5> onFailure( java.util.function.Consumer<Throwable> action) { return onFailure(Throwable.class, action); }
/** * 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. * @param <TV3> Input type. * @param <TV4> Input type. * @param <TV5> Input type. * @return A new consumer with a listener action. */ default <TV1 extends V1, TV2 extends V2, TV3 extends V3, TV4 extends V4, TV5 extends V5, X extends Throwable> Consumer5<TV1, TV2, TV3, TV4, TV5> onFailure( Class<? extends X> type, java.util.function.Consumer<X> action) { return (v1, v2, v3, v4, v5) -> runOnFailure(() -> tryAccept(v1, v2, v3, v4, v5), type, action); }
/** * 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 <TV3> Input type. * @param <TV4> Input type. * @param <TV5> Input type. * @param <X> Exception type. * @return A new consumer. */ default <TV1 extends V1, TV2 extends V2, TV3 extends V3, TV4 extends V4, TV5 extends V5, X extends Throwable> Consumer5<TV1, TV2, TV3, TV4, TV5> unwrap( Class<X> type) { return (v1, v2, v3, v4, v5) -> runUnwrap(() -> tryAccept(v1, v2, v3, v4, v5), type); } }
/** * Wrap an exception as new exception provided by the given wrap function. * * @param wrapper Wrap function. * @param <TV1> Input type. * @param <TV2> Input type. * @param <TV3> Input type. * @param <TV4> Input type. * @param <TV5> Input type. * @return A new consumer. */ default <TV1 extends V1, TV2 extends V2, TV3 extends V3, TV4 extends V4, TV5 extends V5> Consumer5<TV1, TV2, TV3, TV4, TV5> wrap( java.util.function.Function<Throwable, Exception> wrapper) { return (v1, v2, v3, v4, v5) -> runWrap(() -> tryAccept(v1, v2, v3, v4, v5), wrapper); }
default void accept(V1 v1, V2 v2, V3 v3, V4 v4, V5 v5) { runAction(() -> tryAccept(v1, v2, v3, v4, v5)); }