Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Wiki Markup
The general usage contract for {{equals()}} as specified by the Java Language Specification \[[JLS 052005|AA. Java References#JLS 05]\] says:

...

Wiki Markup
It is currently not possible to extend an instantiable class (as opposed to an {{abstract}} class) and add a value or field in the subclass while preserving the {{equals()}} contract. This implies that composition must be preferred over inheritance. This technique does qualify as a reasonable workaround \[[Bloch 082008|AA. Java References#Bloch 08]\]. It can be implemented by giving the {{XCard}} class a private {{card}} field and providing a {{public}} {{viewCard()}} method. 

...

Wiki Markup
"There are some classes in the Java platform libraries that do extend an instantiable class and add a value component. For example, {{java.sql.Timestamp}} extends {{java.util.Date}} and adds a nanoseconds field. The {{equals}} implementation for {{Timestamp}} does violate symmetry and can cause erratic behavior if {{Timestamp}} and {{Date}} objects are used in the same collection or are otherwise intermixed." \[[Bloch 082008|AA. Java References#Bloch 08]\]

...

References

Wiki Markup
\[[API 062006|AA. Java References#API 06]\] [method equals()|http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#equals(java.lang.Object)]
\[[Bloch 082008|AA. Java References#Bloch 08]\] Item 8: Obey the general contract when overriding equals
\[[Darwin 042004|AA. Java References#Darwin 04]\] 9.2 Overriding the equals method

...