Domanda

il metodo java.util.concurrent.BlockingQueue.add (E e) 's JavaDoc si legge:

  

boolean add (E e)

     

Inserisce l'elemento specificato in   questa coda se è possibile farlo   immediatamente senza violare capacità   restrizioni, restituendo vero su   successo e un lancio   IllegalStateException se non c'è spazio   attualmente disponibile. Quando si utilizza un   capacità limitata di coda, è   generalmente preferibile utilizzare l'offerta.

La mia domanda è: sarà mai tornare falso? in caso contrario, perché questo metodo di restituire un valore booleano? Sembra strano per me. Qual è la decisione di design dietro questo?

Grazie per la vostra conoscenza!
Manuel

È stato utile?

Soluzione

Segue il contratto di Collection.add(E e) (dal momento che è un BlockingQueue sottotipo di Collection):

  

Se una raccolta rifiuta di aggiungere un   particolare elemento per qualsiasi motivo   diverso da quello che già contiene   l'elemento, deve lanciare un   eccezione (piuttosto che ritornare   false). Questo conserva l'invariante   che una collezione contiene sempre il   elemento specificato dopo questa chiamata   ritorni.

Altri suggerimenti

Il dietro la decisione è: sicuro veloce. L'IllegalStateException sarà gettato, se la coda ha una capacità limitata. IllegalStateException è un RuntimeException. Quindi, se l'eccezione si butta, probabilmente avete un difetto nella logica dell'applicazione o la logica dell'applicazione non è abbastanza sulla difensiva. O, per dirla in altre parole:. Se si desidera utilizzare una coda limitata, l'applicazione deve affrontare in modo corretto (uso offer invece)

Sto indovinando che ha un tipo di ritorno booleano perché è una sottointerfaccia di Queue, che ha anche un metodo boolean add(E obj) (che a sua volta deriva da Collection). Alcune implementazioni Queue respingono i tentativi di aggiungere oggetti alla coda restituendo falsa.

Quindi, la risposta alla tua domanda è che le implementazioni di BlockingQueue non torneranno mai falso.

Il metodo restituisce un valore booleano perché le sostituzioni Collection#add(E e) .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top