Cercando di utilizzare Java DelayQueue
, devo implementare l'interfaccia Delayed
che richiede un compareTo()
"method that provides an ordering consistent with its getDelay method.". L'intenzione è ovviamente che lo DelayQueue
possa facilmente ordinare gli oggetti in coda in modo tale che il successivo che esaurisce il ritardo possa essere restituito a qualsiasi utente.java.util.concurrent.Delayed mi costringe davvero a violare equals/compare To consistency?
Ora ho la necessità di rimuovere anche gli oggetti dalla coda prima del tempo. Devo chiamare lo delayQueue.remove(queuedObject)
. Questo ovviamente funziona solo se gli oggetti in coda hanno un metodo equals()
che riflette il loro carico utile e non il tempo di ritardo rimanente completamente non correlato.
Come risultato, compareTo()
si basa sul tempo di ritardo rimanente mentre equals()
si basa sul carico degli oggetti in coda, quindi non sono coerenti, come "fortemente raccomandato" nel javadoc of Comparable
.
Domanda: mi manca qualcosa o è davvero un po 'strano nella progettazione di DelayQueue
?
Bene, è "fortemente consigliato (anche se non obbligatorio)", quindi non direi che devi violare qualcosa. Ci sono alcune classi in JRE che presentano 'compareTo' incoerente con' equals', incluso 'ScheduledFutureTask' che implementa' Delayed'. – izstas
Vedere anche http://stackoverflow.com/questions/8446736/when-using-the-delayqueue-of-java-should-i-implement-equals-and-hashcode-as – Raedwald