Ausnahmen in Lambdas auslösen
- Ein Lambda-Ausdruck kann Ausnahmen auslösen.
- Für geprüfte Ausnahmen:
- Die ausgelöste Ausnahme muss mit den in der throws-Klausel der abstrakten Methode der Funktionsschnittstelle aufgeführten Ausnahmen kompatibel sein.
Anforderungen für geprüfte Ausnahmen
- Wenn Lambda eine geprüfte Ausnahme auslöst (z. B. IOException):
- Die abstrakte Methode der funktionalen Schnittstelle muss dieselbe Ausnahme in der throws-Klausel enthalten.
- Ohne diese Klausel ist der Lambda-Ausdruck nicht mit der Methode kompatibel und verursacht einen Kompilierungsfehler.
Beispiel: Ausnahmeauslösung in Lambda
Code:
import java.io.*;
interface MyIOAction {
boolean ioAction(Reader rdr) throws IOException;
}
class LambdaExceptionDemo {
public static void main(String args[]) {
// Esta lambda de bloco pode lançar uma IOException.
// A cláusula throws deve estar presente em ioAction().
MyIOAction myIO = (rdr) -> {
int ch = rdr.read(); // Pode lançar IOException
// Lógica adicional pode ser inserida aqui
return true;
};
}
}
Nach dem Login kopieren
Erklärung:
throws-Klausel:
- Die ioAction(Reader rdr)-Methode in der MyIOAction-Funktionsschnittstelle enthält das Auslösen einer IOException.
- Dadurch kann das mit der Methode verknüpfte Lambda Vorgänge verwenden, die eine IOException auslösen können, wie z. B. rdr.read().
Error without throws-Klausel:
- Wenn die throws IOException-Klausel aus ioAction entfernt wird, wird das Programm nicht kompiliert.
- Dies geschieht, weil die vom Lambda ausgelöste Ausnahme (IOException) nicht in der Methode behandelt oder deklariert wird.
Wichtiger Hinweis:
- Kompatibilität zwischen Lambdas und Funktionsschnittstellen:
- Ein Lambda-Ausdruck muss mit der abstrakten Methode der Funktionsschnittstelle kompatibel sein.
- Für geprüfte Ausnahmen erfordert diese Kompatibilität, dass vom Lambda ausgelöste Ausnahmen in der throws-Klausel der Methode aufgeführt sind.
Praxistest:
Versuchen Sie, die throws-Klausel aus ioAction im obigen Code zu entfernen. Dies führt zu einem Kompilierungsfehler aufgrund der Inkompatibilität zwischen Lambda und der funktionalen Schnittstellenmethode.

Das obige ist der detaillierte Inhalt vonLösen Sie eine Ausnahme innerhalb eines Lambda-Ausdrucks aus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!