...
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 |
...