45

Lorsqu'il n'y a pas de lignes, query.list() et criteria.list() renvoient une liste vide au lieu d'une valeur nulle. Quelle est la raison derrière cela?hibernate query.list() retourne la liste vide au lieu de la valeur

+0

pourquoi voulez-vous null? Je comprends quand vous demandez un résultat unique - pas trouvé aurait du sens à retourner null. Mais list() devrait toujours retourner une liste vide! Quelle est la signification d'une liste nulle? – ACV

Répondre

86

La raison est de ne pas forcer les contrôles nuls dans le code client, en cohérence avec Effective Java 2nd Edition, article 43: Retour des tableaux ou des collections vides, non NULLS.

Ceci rend le code client plus simple et moins sujette aux erreurs (et probablement aussi l'implémentation de la méthode).

L'idiome null-retour est probablement un vestige de langage de programmation C, dans lequel les longueurs de réseau sont renvoyés séparément des matrices réelles. En C, il n'y a pas d'avantage pour allouer un tableau si zéro est retourné comme longueur.

+0

hmm ... mais même si cela empêche les vérifications nuls, nous devons encore vérifier la taille de la liste ... non? et aussi comme une bonne pratique, nous vérifie toujours pour null aussi (au moins dans notre équipe). – Reddy

+12

C'est le point - si vous êtes sûr (sur la base des promesses d'une API) qu'une valeur ne peut pas être nulle, alors vous ne vérifiez pas null. Et non, vous n'avez pas besoin de vérifier la taille. Lorsque vous itérez la collection, elle ignore l'itération. – Bozho

+0

okay ... je l'ai. Si c'est un client nul et en tant que client si je n'ai pas vérifié, NPE peut faire tomber mon application. Mais si c'est une collection vide, il faudrait simplement passer la logique et continuer (comme nous vérifions généralement la taille de toute façon). Merci Peter et Bozho. – Reddy

10

Il est cohérent: une liste est retournée avec tous les résultats, qu'il y en ait ou non.

Questions connexes