Maison  >  Article  >  Java  >  Comment la classe facultative de Java 8 peut-elle simplifier les getters de chaînage et éviter les exceptions NullPointerException ?

Comment la classe facultative de Java 8 peut-elle simplifier les getters de chaînage et éviter les exceptions NullPointerException ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-25 12:11:30776parcourir

How Can Java 8's Optional Class Simplify Chaining Getters and Avoid NullPointerExceptions?

Chaînage des getters et gestion des exceptions NullPointerExceptions

Lors de l'exécution d'une chaîne d'appels de getter pour récupérer des données à partir d'objets imbriqués, il est nécessaire d'effectuer des vérifications nulles pour éviter les NullPointerExceptions. Cela peut rapidement devenir verbeux et disgracieux lorsqu'il s'agit de plusieurs niveaux d'objets.

Imbrication des instructions If

Une approche courante consiste à imbriquer les instructions if, en vérifiant chaque objet dans le chaîne pour null avant de continuer. Cependant, cette méthode peut devenir lourde et difficile à maintenir.

Loi de rupture de Déméter (LoD)

Cette approche viole la loi de Déméter (LoD) , qui stipule que les méthodes ne doivent appeler d'autres méthodes que sur les objets auxquels elles font directement référence. En accédant aux objets au-delà de leur contexte immédiat, cette méthode viole l'encapsulation des classes impliquées.

Utilisation d'Optional (Java 8)

Heureusement, Java 8 a introduit la classe Optionnel , qui fournit un moyen plus élégant et plus sûr de gérer les valeurs nulles dans les chaînes de getters. Facultatif représente une valeur éventuellement nulle et fournit des méthodes pour mapper et filtrer la valeur qu'elle contient.

Chaîner les getters avec Optionnel.ofNullable

Pour chaîner les getters à l'aide de Facultatif, appelez simplement Facultatif.ofNullable() sur le premier objet de la chaîne. Cela crée un objet facultatif qui représente la valeur ou null. Vous pouvez ensuite enchaîner les opérations map() pour appliquer des appels getter à la valeur, et Facultatif gérera automatiquement les vérifications nulles.

<code class="java">Optional<Doorknob> doorknob = Optional.ofNullable(house)
        .map(house -> house.getFloor(0))
        .map(floorZero -> floorZero.getWall(WEST))
        .map(wallWest -> wallWest.getDoor())
        .map(door -> door.getDoorknob());</code>

Sécurité et encapsulation

Ceci Cette approche simplifie non seulement le code, mais garantit également la sécurité du type. La classe Facultative lèvera une exception si vous essayez d’accéder à la valeur qu’elle représente sans vérifier au préalable si elle est nulle. De plus, il maintient l'encapsulation des classes impliquées, car vous accédez uniquement aux méthodes directement sur les objets que vous référencez.

Conclusion

Bien qu'il puisse parfois être nécessaire de violer la LoD, il est généralement recommandé d'éviter une imbrication excessive des instructions if lors de l'enchaînement des getters. Au lieu de cela, envisagez d'utiliser la classe Optionnel pour gérer les valeurs nulles de manière plus élégante et plus sûre.

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