Maison >Java >javaDidacticiel >Comment puis-je gérer les exceptions vérifiées dans les fonctions Java 8 Lambda ?

Comment puis-je gérer les exceptions vérifiées dans les fonctions Java 8 Lambda ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-20 16:54:151065parcourir

How Can I Handle Checked Exceptions in Java 8 Lambda Functions?

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 :

  1. Définir une interface fonctionnelle personnalisée :

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) { ... }
  1. Envelopper la méthode :

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);
  1. Corps Lambda qui gère les exceptions :

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn