...
Unfortunately, in this case it is impossible to extend the Card
class by adding a value or field in the subclass while preserving the Java equals()
contract. This problem is not specific to the Card class but applies to any class hierarchy that can consider equal instances of distinct subclasses of some superclass. For such cases, use composition rather than inheritance to achieve the desired effect [Bloch 2008], [Liskov 1994], [Cline, C++ Super-FAQ]. It is fundamentally impossible to have a class that both allows arbitrary subclass extensions and permits an equals()
method that is reflexive, symmetric, and transitive, as is required by Object.equals()
. In the interests of consistency and security, we forgo arbitrary subclass extensions, and assume that {{Card.equals()}} may impose certain restrictions on its subclasses.
...
Tool | Version | Checker | Description | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
CodeSonar |
| FB.BAD_PRACTICE.EQ_GETCLASS_AND_CLASS_CONSTANT FB.CORRECTNESS.OVERRIDING_EQUALS_NOT_SYMMETRIC | equals method fails for subtypes equals method overrides equals in superclass and may not be symmetric | JAVA.COMPARE.CTO.ASSYM | Asymmetric compareTo (Java) | |||||||||
Parasoft Jtest |
| CERT.MET08.EQREFL | Make sure implementation of Object.equals(Object) is reflexive | |||||||||||
SonarQube |
| S2162 | "equals" methods should be symmetric and work for subclasses | SonarQube Java Plugin | Include Page | | SonarQube Java Plugin_V | SonarQube Java Plugin_V | S2162
Related Guidelines
...
[API 2014] | Class URI Class URL (method equals() ) |
Item 8, "Obey the General Contract When Overriding | |
\[Cline, C++ Super-FAQ\] | |
Section 9.2, "Overriding the | |
Chapter 3, "Classes, Strings, and Arrays," section "The Object Class (Equality)" | |
[Liskov 1994] | Liskov, B. H.; Wing, J. M. (November 1994). A behavioral notion of subtyping. ACM Trans. Program. Lang. Syst.16 (6). pp. 1811–1841. doi:10.1145/197320.197383. An updated version appeared as CMU technical report: Liskov, Barbara; Wing, Jeannette (July 1999). "Behavioral Subtyping Using Invariants and Constraints" (PS). |
[Sun 2006] | Determining If Two Keys Are Equal (JCA Reference Guide) |
"More Joy of Sets" |
...