Maison >Java >javaDidacticiel >Comment gérer les exceptions vérifiées dans les expressions Java 8 Lambda ?

Comment gérer les exceptions vérifiées dans les expressions Java 8 Lambda ?

DDD
DDDoriginal
2024-12-30 11:10:09513parcourir

How to Handle Checked Exceptions in Java 8 Lambda Expressions?

Fonctions Lambda avec exceptions dans Java 8

Dans Java 8, les fonctions lambda peuvent être utilisées pour référencer des méthodes avec des signatures spécifiques. Cependant, lorsque la méthode référencée déclare une exception vérifiée, définir la référence lambda peut être difficile.

Problème

Considérez la méthode suivante qui prend une chaîne comme argument et renvoie un entier, mais peut lancer une IOException :

Integer myMethod(String s) throws IOException

Comment définir une référence lambda à cela méthode ?

Solution

Il existe deux approches principales pour gérer les exceptions dans les références lambda :

1. Interface fonctionnelle personnalisée

Si vous contrôlez le code, vous pouvez définir une interface fonctionnelle personnalisée qui déclare l'exception vérifiée :

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

Cela vous permet de créer des références aux méthodes qui lancent des exceptions vérifiées :

void foo (CheckedFunction f) { ... }

2. Encapsulation dans une méthode non vérifiée

Si la modification de la signature de la méthode n'est pas une option, vous pouvez envelopper la méthode vérifiée dans une méthode qui ne déclare pas d'exception vérifiée :

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

Vous pouvez alors référencer la méthode enveloppée :

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

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