Lancement d'exceptions dans Lambdas
- Une expression lambda peut lever des exceptions.
- Pour les exceptions vérifiées :
- L'exception levée doit être compatible avec celles listées dans la clause throws de la méthode abstraite de l'interface fonctionnelle.
Exigences pour les exceptions vérifiées
- Si lambda lève une exception vérifiée (par exemple IOException) :
- La méthode abstraite de l'interface fonctionnelle doit inclure la même exception dans la clause throws.
- Sans cette clause, l'expression lambda sera incompatible avec la méthode et provoquera une erreur de compilation.
Exemple : lancement d'exception dans 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;
};
}
}
Copier après la connexion
Explication :
lance la clause :
- La méthode ioAction(Reader rdr) dans l'interface fonctionnelle MyIOAction inclut les IOExceptions.
- Cela permet au lambda associé à la méthode d'utiliser des opérations qui peuvent lancer IOException, telles que rdr.read().
Erreur sans lancer Clause :
- Si la clause throws IOException est supprimée de ioAction, le programme ne se compile pas.
- Cela se produit car l'exception levée par la lambda (IOException) n'est pas gérée ou déclarée dans la méthode.
Remarque importante :
- Compatibilité entre Lambdas et interfaces fonctionnelles :
- Une expression lambda doit être compatible avec la méthode abstraite de l'interface fonctionnelle.
- Pour les exceptions vérifiées, cette compatibilité nécessite que les exceptions levées par le lambda soient répertoriées dans la clause throws de la méthode.
Test pratique :
Essayez de supprimer la clause throws de ioAction dans le code ci-dessus. Cela entraînera une erreur de compilation en raison d'une incompatibilité entre lambda et la méthode d'interface fonctionnelle.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!