Lambda-Funktionen und Ausnahmebehandlung in Java 8
In Java 8 bieten Lambda-Funktionen eine prägnante Syntax zum Definieren von Funktionstypen. Beim Umgang mit Lambda-Funktionen, die möglicherweise geprüfte Ausnahmen auslösen können, tritt jedoch häufig ein Problem auf.
Betrachten Sie die folgende Lambda-Funktion, die eine IOException auslöst:
Integer myMethod(String s) throws IOException
Versuch, einen Verweis darauf zu erstellen Methode, die die Standardfunktionsschnittstelle verwendet, führt zu einem Kompilierungsfehler. Dies liegt daran, dass die Funktionsschnittstelle keine geprüften Ausnahmen deklariert und daher nicht mit Methoden wie myMethod kompatibel ist.
Um dieses Problem zu beheben, haben wir mehrere Optionen:
Wenn der Code unter Ihrer Kontrolle steht, können Sie eine benutzerdefinierte funktionale Schnittstelle definieren, die explizit deklariert geprüfte Ausnahme. Zum Beispiel:
@FunctionalInterface public interface CheckedFunction<T, R> { R apply(T t) throws IOException; }
Sie können dann diese benutzerdefinierte Schnittstelle verwenden, um auf myMethod zu verweisen:
void foo (CheckedFunction f) { ... }
Alternativ können Sie myMethod in eine neue Methode einbinden, die keine geprüfte Ausnahme auslöst. Zum Beispiel:
public Integer myWrappedMethod(String s) { try { return myMethod(s); } catch(IOException e) { throw new UncheckedIOException(e); } }
Jetzt können Sie über die Funktionsschnittstelle auf diese umschlossene Methode verweisen:
Function<String, Integer> f = (String t) -> myWrappedMethod(t);
Als letzte Option können Sie einen Lambda-Funktionskörper definieren, der die geprüfte Ausnahme explizit behandelt. Zum Beispiel:
Function<String, Integer> f = (String t) -> { try { return myMethod(t); } catch(IOException e) { throw new UncheckedIOException(e); } };
Das obige ist der detaillierte Inhalt vonWie kann ich geprüfte Ausnahmen in Java 8 Lambda-Funktionen behandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!