In Java 8 bieten Lambda-Ausdrücke eine prägnante Möglichkeit, Methodenreferenzen darzustellen. Wenn Sie jedoch auf Methoden stoßen, die möglicherweise geprüfte Ausnahmen auslösen, reicht die Standard-Lambda-Syntax nicht mehr aus.
Betrachten Sie die folgende Methode:
Integer myMethod(String s) throws IOException
Erstellen einer Lambda-Referenz auf diese Methode mithilfe der Syntax Function
Um dieses Problem zu lösen, stehen mehrere Ansätze zur Verfügung:
1. Definieren Sie eine benutzerdefinierte funktionale Schnittstelle:
Wenn die Methode unter Ihrer Kontrolle steht, wird die Definition einer benutzerdefinierten funktionalen Schnittstelle empfohlen, die die überprüfte Ausnahme deklariert:
@FunctionalInterface public interface CheckedFunction<T, R> { R apply(T t) throws IOException; }
Diese Schnittstelle kann dann sein als Lambda-Typ verwendet:
void foo (CheckedFunction<String, Integer> f) { ... }
2. Umschließen der ursprünglichen Methode:
Wenn eine Änderung der ursprünglichen Methode nicht möglich ist, können Sie sie mit einer neuen Methode umschließen, die keine geprüfte Ausnahme auslöst:
public Integer myWrappedMethod(String s) { try { return myMethod(s); } catch(IOException e) { throw new UncheckedIOException(e); } }
Die umschlossene Die Methode kann dann durch ein Lambda referenziert werden:
Function<String, Integer> f = (String t) -> myWrappedMethod(t);
3. Behandlung von Ausnahmen innerhalb des Lambda:
Alternativ können Sie die Ausnahme innerhalb des Lambda selbst behandeln:
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 behandeln, wenn ich Lambda-Ausdrücke in Java 8 verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!