Значит, ваша проблема в том, что у вас есть фрагмент кода, который генерирует проверенное исключение, и вы хотите, чтобы он стал реализацией объекта Function
? Вы где-то нашли, как это сделать для Consumer
, вам просто нужен адаптер кода для Function
?
Предполагая, что перезапись должна выглядеть примерно так:
import java.util.function.Function;
@FunctionalInterface
public interface ThrowingFunction<T, R, EXC extends Exception> {
R apply(T t) throws EXC;
static <T> Function<T> throwingFunctionWrapper(
ThrowingFunction<T, R, Exception> throwingFunction
) {
return t -> {
try {
return throwingFunction.apply(t);
} catch (Exception exc) {
throw new RuntimeException(exc);
}
};
}
}
Чтобы быть немного более общим, throwingFunctionWrapper
может быть:
static <T> Function<T> throwingFunctionWrapper(
ThrowingFunction<T, R, ? extends Exception> throwingFunction
) {
Чтобы иметь дело с исключением, вы должны создать подкласс RuntimeException
, а затем только перехватить этот класс, чтобы не разворачивать другие исключения во время выполнения.
Развернуть (с исходным кодом) как:
try {
...
} catch (RuntimeException exc) { // subclass me !!
throw (IOException)exc.getCause();
}