LibJF/libjf-base/src/main/java/io/gitlab/jfronny/libjf/generic/Try.java

59 lines
2.3 KiB
Java
Raw Normal View History

package io.gitlab.jfronny.libjf.generic;
2022-03-31 20:45:10 +02:00
2022-04-22 19:29:59 +02:00
import java.util.Objects;
import java.util.function.*;
2022-03-31 20:45:10 +02:00
public class Try {
public static void orElse(ThrowingRunnable<?> tr, Consumer<Throwable> alternative) {
2022-04-22 19:29:59 +02:00
Objects.requireNonNull(tr).addHandler(alternative).run();
2022-03-31 20:45:10 +02:00
}
2022-04-22 19:18:17 +02:00
public static <T> T orElse(ThrowingSupplier<T, ?> tr, Function<Throwable, ? extends T> alternative) {
2022-04-22 19:29:59 +02:00
return Objects.requireNonNull(tr).addHandler(alternative).get();
2022-03-31 20:45:10 +02:00
}
2022-04-22 19:18:17 +02:00
public static void orThrow(ThrowingRunnable<?> tr) {
2022-04-22 19:29:59 +02:00
Objects.requireNonNull(tr).orThrow().run();
2022-04-22 19:18:17 +02:00
}
public static <T> T orThrow(ThrowingSupplier<T, ?> tr) {
2022-04-22 19:29:59 +02:00
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);
2022-04-22 19:18:17 +02:00
}
protected static RuntimeException runtimeException(Throwable t) {
2022-04-22 19:29:59 +02:00
return t == null ? null : t instanceof RuntimeException e ? e : new RuntimeException(t);
2022-04-22 19:18:17 +02:00
}
2022-03-31 20:45:10 +02:00
}