ProjectAres/Util/core/src/main/java/tc/oc/commons/core/util/ThrowingFunction.java

29 lines
807 B
Java

package tc.oc.commons.core.util;
import java.util.function.Function;
import com.google.common.base.Throwables;
import com.google.common.util.concurrent.UncheckedExecutionException;
/**
* A {@link Function} that can throw anything. Call {@link #applyThrows} directly
* if you want to handle the exceptions, or call {@link #apply} to have them
* wrapped in a {@link UncheckedExecutionException}.
*
* TODO: Catches everything, not just {@link E}.. not ideal
*/
@FunctionalInterface
public interface ThrowingFunction<T, R, E extends Throwable> extends Function<T, R> {
R applyThrows(T t) throws E;
@Override
default R apply(T t) {
try {
return applyThrows(t);
} catch(Throwable throwable) {
throw Throwables.propagate(throwable);
}
}
}