Heim >Java >javaLernprogramm >Wie gehe ich mit geprüften Ausnahmen in Java 8 Lambda-Ausdrücken um?

Wie gehe ich mit geprüften Ausnahmen in Java 8 Lambda-Ausdrücken um?

DDD
DDDOriginal
2024-12-30 11:10:09513Durchsuche

How to Handle Checked Exceptions in Java 8 Lambda Expressions?

Lambda-Funktionen mit Ausnahmen in Java 8

In Java 8 können Lambda-Funktionen verwendet werden, um Methoden mit bestimmten Signaturen zu referenzieren. Wenn die referenzierte Methode jedoch eine geprüfte Ausnahme deklariert, kann die Definition der Lambda-Referenz eine Herausforderung sein.

Problem

Betrachten Sie die folgende Methode, die einen String als Argument verwendet und Gibt eine Ganzzahl zurück, kann jedoch eine IOException auslösen:

Integer myMethod(String s) throws IOException

Wie definieren wir eine Lambda-Referenz darauf? Methode?

Lösung

Es gibt zwei Hauptansätze für die Behandlung von Ausnahmen in Lambda-Referenzen:

1. Benutzerdefinierte funktionale Schnittstelle

Wenn Sie die Kontrolle über den Code haben, können Sie eine benutzerdefinierte funktionale Schnittstelle definieren, die die geprüfte Ausnahme deklariert:

@FunctionalInterface
public interface CheckedFunction<T, R> {
   R apply(T t) throws IOException;
}

Dadurch können Sie Verweise auf Methoden erstellen die geprüfte Ausnahmen auslösen:

void foo (CheckedFunction f) { ... }

2. Einschließen einer nicht geprüften Methode

Wenn das Ändern der Methodensignatur keine Option ist, können Sie die geprüfte Methode in eine Methode einschließen, die keine geprüfte Ausnahme deklariert:

public Integer myWrappedMethod(String s) {
    try {
        return myMethod(s);
    }
    catch(IOException e) {
        throw new UncheckedIOException(e);
    }
}

Sie können dann auf die umschlossene Methode verweisen:

Function<String, Integer> f = (String t) -> myWrappedMethod(t);

Das obige ist der detaillierte Inhalt vonWie gehe ich mit geprüften Ausnahmen in Java 8 Lambda-Ausdrücken um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn