Alcuni giorni fa siamo passati a Java 7 all'interno della mia azienda - finalmente! Jay \ o/Così ho scoperto la classe Objects
e sono rimasto stupito dal modo in cui sono stati realizzati i metodi hashCode()
e equals()
, riducendo un sacco di codice boylerplate rispetto a quelli generati da eclipse per impostazione predefinita (ALT + SHIFT + S -> H).Come insegnare eclipse a generare equazioni compatte() e hashCode() dalla classe oggetti jdk 7?
Mi chiedevo se potevo modificare il comportamento predefinito dell'eclissi generato hashCode()
e equals()
?
Mi piacerebbe vedere questo:
@Override
public int hashCode()
{
return Objects.hash(one, two, three, four/*, ...*/);
}
invece di questo:
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + ((one == null) ? 0 : one.hashCode());
result = prime * result + ((two == null) ? 0 : two.hashCode());
result = prime * result + ((three == null) ? 0 : three.hashCode());
result = prime * result + ((four== null) ? 0 : four.hashCode());
// ...
return result;
}
Lo stesso vale per equals()
. This is the article Ho preso questo da.
Qualche idea su come realizzare questo meglio?
Per "Genera toString()" è possibile definire un modello nella pagina wizzard. Dovresti presentare un ticket su [eclipse-bugzilla] (https://bugs.eclipse.org/bugs/), forse aggiungeranno qualcosa di simile per l'hashcode eq + in futuro. Se lo fai, ti piace un biglietto simile, quindi tutti gli interessati possono farlo più volte! – Chriss
Puoi anche ripiegare la funzione 'hashCode()' se non vuoi vederla. Penso che potrebbe essere una buona idea considerare se l'implementazione di default è quella che vuoi in tutti i casi possibili in futuro. Impostando per default l'espressione stenografica si rinuncia alla flessibilità nel modificare l'hashCode (non irreversibile, ovviamente), se si desidera/deve farlo. Vedi http://stackoverflow.com/questions/12076846/using-a-larger-prime-as-a-multiplier-when-overriding-hashcode per una discussione sulle funzioni di hash. – posdef
Ho registrato questo miglioramento. Vota per questo! https://bugs.eclipse.org/bugs/show_bug.cgi?id=424214 –