Question

java.util.concurrent.BlockingQueue.add le procédé (E e) «lit de la JavaDoc:

  

add booléenne (E e)

     

Inserts l'élément spécifié dans   cette file d'attente s'il est possible de le faire   immédiatement, sans violer la capacité   restrictions, renvoyant true sur   succès et lancer une   IllegalStateException si aucun espace   actuellement disponible. Lorsque vous utilisez un   file d'attente capacité restreinte, il est   généralement préférable d'utiliser l'offre.

Ma question est: faut-il revenir toujours faux? sinon, pourquoi cette méthode renvoie un booléen? Il semble bizarre pour moi. Quelle est la décision de conception derrière tout cela?

Merci pour vos connaissances!
Manuel

Était-ce utile?

La solution

Il fait suite au contrat de Collection.add(E e) (depuis BlockingQueue est Sous-type de Collection):

  

Si une collection refuse d'ajouter une   élément particulier pour une raison quelconque,   autre que celle-ci contient déjà   l'élément, il doit lancer une   exception (au lieu de retourner   faux). Cela préserve l'invariant   qu'une collection contient toujours   élément spécifié après cet appel   retours.

Autres conseils

Le derrière de décision: échec rapide. Le IllegalStateException sera lancé, si la file d'attente a une capacité limitée. IllegalStateException est un RuntimeException. Donc, si l'exception est jeté, vous avez probablement un défaut dans la logique de votre application ou votre logique d'application ne suffit pas défensive. Ou pour le dire autrement dit:. Si vous souhaitez utiliser une file d'attente limitée, votre application doit traiter correctement (utilisation offer à la place)

Je devine qu'il a un type booléen de retour, car il est une sous-interface de Queue, qui a également une méthode boolean add(E obj) (qui à son tour est dérivé de Collection). Certaines implémentations de Queue rejettera les demandes d'ajouter des objets à la file d'attente en retournant faux.

Ainsi, la réponse à votre question est que les implémentations de BlockingQueue ne reviendront faux.

La méthode renvoie un booléen, car il remplace Collection#add(E e) .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top