Dans Java 8, les expressions lambda fournissent un moyen concis de représenter les références de méthodes. Cependant, lorsque vous rencontrez des méthodes susceptibles de générer des exceptions vérifiées, la syntaxe lambda par défaut devient insuffisante.
Considérez la méthode suivante :
Integer myMethod(String s) throws IOException
Création d'une référence lambda à cette méthode en utilisant la syntaxe Function
Pour résoudre ce problème, plusieurs approches sont disponibles :
1. Définir une interface fonctionnelle personnalisée :
Si la méthode est sous votre contrôle, il est recommandé de 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; }
Cette interface peut ensuite être utilisé comme type lambda :
void foo (CheckedFunction<String, Integer> f) { ... }
2. Encapsuler la méthode d'origine :
Si la modification de la méthode d'origine n'est pas réalisable, vous pouvez l'envelopper avec une nouvelle méthode qui ne lève pas d'exception vérifiée :
public Integer myWrappedMethod(String s) { try { return myMethod(s); } catch(IOException e) { throw new UncheckedIOException(e); } }
L'encapsulé La méthode peut alors être référencée par un lambda :
Function<String, Integer> f = (String t) -> myWrappedMethod(t);
3. Gestion des exceptions dans le Lambda :
Vous pouvez également gérer l'exception dans le lambda lui-même :
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!