[main] Enhance Try DSL

This commit is contained in:
Johannes Frohnmeyer 2022-04-22 19:29:59 +02:00
parent 246ebfac32
commit c2681c29c5
Signed by: Johannes
GPG Key ID: E76429612C2929F4
1 changed files with 39 additions and 15 deletions

View File

@ -1,34 +1,58 @@
package io.gitlab.jfronny.libjf.generic;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.Objects;
import java.util.function.*;
public class Try {
public static void orElse(ThrowingRunnable<?> tr, Consumer<Throwable> alternative) {
tr.addHandler(alternative).run();
Objects.requireNonNull(tr).addHandler(alternative).run();
}
public static <T> T orElse(ThrowingSupplier<T, ?> tr, Function<Throwable, ? extends T> alternative) {
return tr.addHandler(alternative).get();
return Objects.requireNonNull(tr).addHandler(alternative).get();
}
public static void orThrow(ThrowingRunnable<?> tr) {
try {
tr.run();
} catch (Throwable e) {
throw runtimeException(e);
}
Objects.requireNonNull(tr).orThrow().run();
}
public static <T> T orThrow(ThrowingSupplier<T, ?> tr) {
try {
return tr.get();
} catch (Throwable e) {
throw runtimeException(e);
}
return Objects.requireNonNull(tr).orThrow().get();
}
public static <T, U> BiConsumer<T, U> handle(ThrowingBiConsumer<T, U, ?> tr, Consumer<Throwable> handler) {
return Objects.requireNonNull(tr).addHandler(handler);
}
public static <T, U, R> BiFunction<T, U, R> handle(ThrowingBiFunction<T, U, R, ?> tr, Function<Throwable, ? extends R> handler) {
return Objects.requireNonNull(tr).addHandler(handler);
}
public static BooleanSupplier handle(ThrowingBooleanSupplier<?> tr, Predicate<Throwable> handler) {
return Objects.requireNonNull(tr).addHandler(handler);
}
public static <T> Consumer<T> handle(ThrowingConsumer<T, ?> tr, Consumer<Throwable> handler) {
return Objects.requireNonNull(tr).addHandler(handler);
}
public static <T, R> Function<T, R> handle(ThrowingFunction<T, R, ?> tr, Function<Throwable, ? extends R> handler) {
return Objects.requireNonNull(tr).addHandler(handler);
}
public static <T> Predicate<T> handle(ThrowingPredicate<T, ?> tr, Predicate<Throwable> handler) {
return Objects.requireNonNull(tr).addHandler(handler);
}
public static Runnable handle(ThrowingRunnable<?> tr, Consumer<Throwable> handler) {
return Objects.requireNonNull(tr).addHandler(handler);
}
public static <T> Supplier<T> handle(ThrowingSupplier<T, ?> tr, Function<Throwable, ? extends T> handler) {
return Objects.requireNonNull(tr).addHandler(handler);
}
protected static RuntimeException runtimeException(Throwable t) {
return t instanceof RuntimeException e ? e : new RuntimeException(t);
return t == null ? null : t instanceof RuntimeException e ? e : new RuntimeException(t);
}
}