Gestion élégante des contrôles nuls dans les chaînes d'appels Getter
Dans le développement de logiciels, il est courant de rencontrer des situations où vous devez enchaîner des getter appels, tels que :
<code class="java">house.getFloor(0).getWall(WEST).getDoor().getDoorknob();</code>
Cependant, ces chaînes peuvent être sensibles aux NullPointerExceptions si l'un des objets le long de la chaîne est nul. Pour se prémunir contre cela, les développeurs ont souvent recours à de longues vérifications si nulles, ajoutant une complexité inutile et une duplication de code.
Approches alternatives
Bien qu'il n'y ait pas d'erreurs the-box utilitaire en Java pour gérer ce problème, il existe des alternatives élégantes :
Loi de violation de Demeter
Comme suggéré par @Erwin Bolwidt, vous pouvez briser la Loi de Déméter (LoD) et accédez directement aux propriétés imbriquées :
<code class="java">if (house != null && house.floors != null && house.floors[0] != null && house.floors[0].walls != null && house.floors[0].walls[WEST] != null) ...</code>
Cette approche est déconseillée car elle viole le principe d'encapsulation et augmente la complexité du code.
Facultatif avec Java 8
Java 8 a introduit le type Facultatif, qui vous permet de gérer les valeurs nulles avec plus d'élégance. Vous pouvez envelopper chaque appel getter dans un facultatif :
<code class="java">Optional.ofNullable(house) .map(house -> house.getFloor(0)) .map(floor -> floor.getWall(WEST)) .map(wall -> wall.getDoor()) .map(door -> door.getDoorknob());</code>
Cette approche élimine le besoin de vérifications nulles explicites et fournit une syntaxe plus concise et expressive.
Conclusion
Bien qu'il n'existe aucun utilitaire intégré pour vérifier les valeurs nulles dans les chaînes getter, le type facultatif et la violation de la loi de Demeter offrent des solutions flexibles et dépendantes du contexte. Le choix de la meilleure approche dépend du scénario spécifique et des principes de conception du projet.
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!