Article has 2 comments

  • v6ak

    1
    „Hash musí být počítán pouze z neměnných (immutable) vlastností objektu.“ – samotný konkrakt Object.equals(Object) to nevyžaduje: https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object-

    Na druhou stranu je celkem rozumné se toho z několika důvodů držet, zejména kvůli kolekcím, které s tím počítají, což jsou snad všechny mapy a množiny s rozumnou složitostí.

    Paradoxně se zrovna v kolekcích toto nedodržuje a equals se počítá i z mutable věcí: https://docs.oracle.com/javase/8/docs/api/java/util/Set.html#equals-java.lang.Object-

    Jinak psaní equals a hashCode lze přenechat nejen IDE, ale i knihovně (Lombok) nebo jazyku (Scala). Málokdy je potřeba napsat vlastní equals.
  • Jan Verner

    2
    Díky za doplnění.