Ich benutze Java 8 Stream API, und wie wir wissen, unterstützt es nicht überprüft Ausnahmen in jeder funktionalen Schnittstelle in java.util.function.Ist es eine gute Lösung, die Checked Decorator-Funktion in der Stream-API zu verwenden?
Ich muss in der Regel Methode mit geprüften Ausnahmen innerhalb Ströme Operationen und ich habe geschrieben CheckedFunction Dekorateur innerhalb dieser Operationen zu verwenden:
import java.util.function.BiFunction;
import java.util.function.Function;
public interface CheckedFunction<T, R, E extends Throwable> {
R apply(T t) throws E;
static <T, R, CE extends Throwable, UCE extends RuntimeException> Function<T, R> checked(
CheckedFunction<T, R, CE> checked, Function<CE, UCE> exceptionHandler) {
return (t) -> {
try {
return checked.apply(t);
}
catch (RuntimeException | Error e) {
throw e;
}
catch (Throwable e) {
// can't catch - compiler error
if (e instanceof InterruptedException) {
Thread.currentThread().interrupt();
}
throw exceptionHandler.apply((CE) e);
}
};
}
}
so kann ich es in solchen Fällen verwenden:
entities.stream()
.map(checked((entity) -> someResultChecked(entity), // throws IOException
(entity, e) -> { // e is of type IOException
log.error("exception during checked method of " + entity, e);
return new UncheckedIOException(e);
}))
.map(checked((entity) -> saveToDb(entity), // throws SQLException
(entity, e) -> { // e is of type SQLException
log.error("exception during saving " + entity, e);
return new UncheckedSQLException(e);
}))
.map(checked((entity) -> manyExceptionMethod(entity), // throws IOException, SQLException
(entity, e) -> { // e is of type Throwable
return new RuntimeException(e);
}))
es wird jede geprüfte Ausnahme zu unkontrolliert wickeln, aber ich weiß, wenn Methode ist mehr als eine Ausnahme wirft es zu Throwable löschen wird, wie ich es in einfachen Fällen verwenden werde.
Ist es gute Idee, oder ich kann in versteckte Hindernisse laufen?
AKTUALISIERT: Wiederkehrende RuntimeExceptions.
Auch fand ich mehr klare Lösung in Jool mit der Handhabung InterruptedException die inkonsistentes Verhalten verursachen kann, wenn ignoriert: https://github.com/jOOQ/jOOL/blob/master/src/main/java/org/jooq/lambda/Unchecked.java
Sie sollten einen Blick auf JavaRx nehmen, die für das Streaming mit Fehlerbehandlung – flakes
Dank eine schöne API bietet, habe ich versucht, in mehrere Male zu sehen, aber immer gab up.Maybe es ist ein Signal, das ich brauche, um es zu klären, . – Monk3D