dev
ehlxr 2020-12-06 22:26:23 +08:00
parent 9be5ce34d7
commit 52db196264
1 changed files with 176 additions and 0 deletions

View File

@ -0,0 +1,176 @@
package me.ehlxr.utils;
import java.util.ArrayList;
import java.util.Objects;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
/**
* try catch
*
* @author ehlxr
* @since 2020-12-06 21:32.
*/
public class Try {
public static <T> Try.C<T> of(Consumer<? super T> consumer) {
return new Try.C<>(consumer);
}
public static <R> Try.S<R> of(Supplier<? extends R> supplier) {
return new Try.S<>(supplier);
}
public static <T, R> Try.F<T, R> of(Function<? super T, ? extends R> function) {
return new Try.F<>(function);
}
@SuppressWarnings("ConstantConditions")
public static void main(String[] args) {
String param = "10s";
Long result = Try.<String, Long>of(Long::valueOf).get(param, -1L, Throwable::printStackTrace);
System.out.println(result);
// 有返回值,无入参
System.out.println(Try.of(() -> Long.valueOf("s")).get(0L));
System.out.println(Try.of(() -> Long.valueOf("21")).get(0L, e -> {
}));
// 有返回值,有入参
System.out.println(Try.<String, Long>of(Long::valueOf).get("s", 0L, e -> {
}));
ArrayList<String> list = new ArrayList<>();
// 无返回值,无入参
Try.<String>of(e1 -> list.clear()).accept(null, e -> System.out.println("...." + e.getMessage()));
// 无返回值,有入参
Try.<String>
of(v -> list.add(10, v))
.accept("test", e -> System.out.println(e.getMessage()));
}
public static class C<T> {
private final Consumer<? super T> consumer;
C(Consumer<? super T> consumer) {
Objects.requireNonNull(consumer, "No value present");
this.consumer = consumer;
}
/**
*
*
* @param t
*/
public void accept(T t) {
try {
consumer.accept(t);
} catch (Throwable e) {
e.printStackTrace();
}
}
/**
*
*
* @param t
* @param e lambda
*/
public void accept(T t, Consumer<? super Throwable> e) {
try {
consumer.accept(t);
} catch (Throwable th) {
e.accept(th);
}
}
}
public static class S<R> {
private final Supplier<? extends R> supplier;
S(Supplier<? extends R> supplier) {
Objects.requireNonNull(supplier, "No value present");
this.supplier = supplier;
}
/**
*
*
* @param r
* @return
*/
public R get(R r) {
try {
return supplier.get();
} catch (Throwable e) {
e.printStackTrace();
return r;
}
}
/**
*
*
* @param r
* @param e lambda
* @return
*/
public R get(R r, Consumer<? super Throwable> e) {
Objects.requireNonNull(supplier, "No supplier present");
try {
return supplier.get();
} catch (Throwable th) {
e.accept(th);
return r;
}
}
}
public static class F<T, R> {
private final Function<? super T, ? extends R> function;
F(Function<? super T, ? extends R> function) {
Objects.requireNonNull(function, "No value present");
this.function = function;
}
/**
*
*
* @param t
* @param r
* @return
*/
public R get(T t, R r) {
try {
return function.apply(t);
} catch (Throwable e) {
e.printStackTrace();
return r;
}
}
/**
*
*
* @param t
* @param r
* @param e lambda
* @return
*/
public R get(T t, R r, Consumer<? super Throwable> e) {
Objects.requireNonNull(function, "No function present");
try {
return function.apply(t);
} catch (Throwable th) {
e.accept(th);
return r;
}
}
}
}