Expressions Lambda et flux exceptionnels dans Java 8 : filtrer les méthodes en toute sécurité
Les expressions Lambda ont révolutionné le codage Java, permettant des techniques de programmation fonctionnelle concises et expressives . Cependant, lorsqu'il s'agit de méthodes capables de lever des exceptions, comme dans l'exemple fourni, les opérations de flux Java 8 peuvent rencontrer des problèmes de compilation.
Le problème
L'extrait de code tente pour filtrer un flux d'objets Account en fonction de leur méthode isActive(), qui lève une IOException. L'opération de filtrage ne parvient pas à se compiler car Java nécessite que les exceptions vérifiées soient gérées explicitement dans le flux.
La solution
Pour résoudre ce problème, il faut gérer l'exception potentielle avant qu'il n'échappe à l'expression lambda. Ceci peut être réalisé en encapsulant l'appel de la méthode isActive() dans un bloc try-catch à l'intérieur du lambda :
<code class="java">s = s.filter(a -> { try { return a.isActive(); } catch (IOException e) { throw new UncheckedIOException(e); } });</code>
En convertissant l'exception IOException vérifiée en une exception UncheckedIOException, l'exception peut se propager en toute sécurité dans le flux sans provoquer erreurs de compilation.
Méthodes alternatives
Alternativement, la méthode uncheckCall() peut être utilisée pour gérer les exceptions vérifiées sans compter sur des conversions intermédiaires :
<code class="java">return s.filter(a -> uncheckCall(a::isActive)) .map(Account::getNumber) .collect(toSet());</code>
Cette approche fournit un moyen pratique de gérer les exceptions vérifiées tout en conservant la concision des expressions lambda.
Attention
Il est crucial de considérer l'impact potentiel de la conversion des expressions cochées. exceptions en exceptions non contrôlées. Bien que cela simplifie la gestion des exceptions dans les opérations de flux, cela supprime également l'indication directe de l'exception potentielle de la signature de la méthode. Il faut soigneusement réfléchir à ce que la gestion des exceptions de cette manière corresponde au comportement souhaité.
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!