Maison >Java >javaDidacticiel >Comment puis-je gérer les exceptions vérifiées dans les fonctions Java 8 Lambda ?
Fonctions Lambda et gestion des exceptions dans Java 8
Dans Java 8, les fonctions lambda fournissent une syntaxe concise pour définir les types de fonctions. Cependant, un problème courant survient lors de l'utilisation de fonctions lambda qui peuvent potentiellement générer des exceptions vérifiées.
Considérez la fonction lambda suivante qui renvoie une IOException :
Integer myMethod(String s) throws IOException
Tentative de création d'une référence à cette exception La méthode utilisant l’interface Function standard entraînera une erreur de compilation. En effet, l'interface Function ne déclare aucune exception vérifiée, ce qui la rend incompatible avec des méthodes comme myMethod.
Pour résoudre ce problème, nous avons plusieurs options :
Si le code est sous votre contrôle, vous pouvez définir une interface fonctionnelle personnalisée qui déclare explicitement le coché exception. Par exemple :
@FunctionalInterface public interface CheckedFunction<T, R> { R apply(T t) throws IOException; }
Vous pouvez ensuite utiliser cette interface personnalisée pour référencer maMéthode :
void foo (CheckedFunction f) { ... }
Vous pouvez également envelopper myMethod dans une nouvelle méthode qui ne lève pas d'exception vérifiée. Par exemple :
public Integer myWrappedMethod(String s) { try { return myMethod(s); } catch(IOException e) { throw new UncheckedIOException(e); } }
Maintenant, vous pouvez référencer cette méthode encapsulée à l'aide de l'interface de fonction :
Function<String, Integer> f = (String t) -> myWrappedMethod(t);
En dernière option, vous pouvez définir un corps de fonction lambda qui gère explicitement l'exception vérifiée. Par exemple :
Function<String, Integer> f = (String t) -> { try { return myMethod(t); } catch(IOException e) { throw new UncheckedIOException(e); } };
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!