Frage

Das Verfahren java.util.concurrent.BlockingQueue.add (E e) 's JavaDoc lautet:

boolean add (E e)

Fügt das angegebene Element in diese Warteschlange, wenn es möglich ist, dies zu tun sofort, ohne Kapazität zu verletzen Einschränkungen gibt true zurück auf Erfolg und wirft ein Illegal wenn kein Platz mehr ist derzeit verfügbar. Bei Verwendung eines Kapazitäts beschränkt Warteschlange, es ist im allgemeinen bevorzugt Angebot zu nutzen.

Meine Frage ist: wird es immer false zurück? wenn nicht, warum nicht zurückgibt diese Methode einen boolean? Es scheint seltsam für mich. Was ist die Design-Entscheidung dahinter?

Danke für Ihr Wissen!
Manuel

War es hilfreich?

Lösung

Es folgt den Vertrag von Collection.add(E e) (seit BlockingQueue a Subtyp von Collection):

Wenn eine Sammlung verweigert ein hinzufügen bestimmte Element aus irgendeinem Grunde außer, dass es bereits enthält das Element, muss sie werfen ein Ausnahme (eher als Rückkehr falsch). Dies bewahrt die invariant dass eine Sammlung enthält immer die gebenes Element nach diesem Aufruf kehrt zurück.

Andere Tipps

Die Entscheidung, hinter ist: schnell scheitern. Die Illegal wird geworfen, wenn die Warteschlange eine begrenzte Kapazität hat. Illegal ist ein Runtime. Also, wenn die Ausnahme ausgelöst wird, haben Sie wahrscheinlich einen Fehler in der Anwendungslogik oder Ihre Anwendungslogik ist nicht defensiv genug. Oder sagen, dass es mit anderen Worten:. Wenn Sie eine begrenzte Warteschlange verwenden möchten, sollten Sie Ihre Anwendung damit umgehen richtig (Verwendung offer statt)

Ich vermute, es einen boolean Rückgabetyp hat, weil es ein Subschnittstelle von Queue ist, die auch eine boolean add(E obj) Methode hat (die wiederum aus Collection abgeleitet). Bestimmte Implementierungen Queue lehnen Versuche auf Objekte zu der Warteschlange hinzufügen, indem falsch zurück.

So die Antwort auf Ihre Frage ist, dass Implementierungen von Blocking nie falsch zurück.

Die Methode gibt einen boolean, weil es überschreibt Collection#add(E e) .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top