....improvvisametne un test fallisce sul CI e non riusciamo ad andare in
produzione.. momento WTF, ed e' pure domenica!!! Che succede?

Il test controlla un parser che crea un Set di oggetti, quindi verifica che
un certo oggetto ci sia nel suddetto Set. Dal debugger, vedo che c'e'!
Stampo l'oggetto... c'e'! Stampo l'hashcode()... uguale! Che cappero
succede???

Dopo un'ora di variegate bestemmie, ormai in un mix di inglese e italiano,
scopro che l'implementazione di hashcode() dell'oggetto prende in
considerazione una lista interna di oggetti che e'... mutabile!!! Arfff!!!
Succede quindi che quando l'oggetto e' inserito nel Set ha un certo
hashcode(), che dopo "cambia" quando la lista interna viene modificata. Ma
ormai il Set l'ha piazzato con l'hashcode() vecchio, quindi non lo trovera'
mai piu'! E tutto questo perche' ho stupidamente rigenerato il metodo
hashcode dall'IDE... sigh!

Niente, occhio all'hashcode(), da usare secondo le regole
<https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#hashCode()>
:)
Ciao,

    Bruno

Reply via email to