public class EqualsHashCodeCheck extends AbstractCheck
Checks that classes that either override equals()
or hashCode()
also
overrides the other.
This check only verifies that the method declarations match Object.equals(Object)
and
Object.hashCode()
exactly to be considered an override. This check does not verify
invalid method names, parameters other than Object
, or anything else.
Rationale: The contract of equals()
and hashCode()
requires that
equal objects have the same hashCode. Therefore, whenever you override
equals()
you must override hashCode()
to ensure that your class can
be used in hash-based collections.
To configure the check:
<module name="EqualsHashCode"/>
Example:
public static class Example1 { public int hashCode() { // code } public boolean equals(String o) { // violation, overloaded implementation of 'equals' // code } } public static class Example2 { public boolean equals(Object o) { // violation, no 'hashCode' // code } public boolean equals(String o) { // code } } public static class Example3 { public int hashCode() { // code } public boolean equals(Object o) { // OK // code } public boolean equals(String o) { // code } } public static class Example4 { public int hashCode() { // code } public boolean equals(java.lang.Object o) { // OK // code } } public static class Example5 { public static int hashCode(int i) { // code } public boolean equals(Object o) { // violation, overloaded implementation of 'hashCode' // code } } public static class Example6 { public int hashCode() { // violation, overloaded implementation of 'equals' // code } public static boolean equals(Object o, Object o2) { // code } }
Parent is com.puppycrawl.tools.checkstyle.TreeWalker
Violation Message Keys:
equals.noEquals
equals.noHashCode
AutomaticBean.OutputStreamOptions
Modifier and Type | Field and Description |
---|---|
static java.lang.String |
MSG_KEY_EQUALS
A key is pointing to the warning message text in "messages.properties"
file.
|
static java.lang.String |
MSG_KEY_HASHCODE
A key is pointing to the warning message text in "messages.properties"
file.
|
Constructor and Description |
---|
EqualsHashCodeCheck() |
Modifier and Type | Method and Description |
---|---|
void |
beginTree(DetailAST rootAST)
Called before the starting to process a tree.
|
void |
finishTree(DetailAST rootAST)
Called after finished processing a tree.
|
int[] |
getAcceptableTokens()
The configurable token set.
|
int[] |
getDefaultTokens()
Returns the default token a check is interested in.
|
int[] |
getRequiredTokens()
The tokens that this check must be registered for.
|
void |
visitToken(DetailAST ast)
Called to process a token.
|
clearMessages, destroy, getFileContents, getLine, getLines, getMessages, getTabWidth, getTokenNames, init, isCommentNodesRequired, leaveToken, log, log, log, setFileContents, setTabWidth, setTokens
finishLocalSetup, getCustomMessages, getId, getMessageBundle, getSeverity, getSeverityLevel, setId, setSeverity
configure, contextualize, getConfiguration, setupChild
public static final java.lang.String MSG_KEY_HASHCODE
public static final java.lang.String MSG_KEY_EQUALS
public EqualsHashCodeCheck()
public int[] getDefaultTokens()
AbstractCheck
getDefaultTokens
in class AbstractCheck
TokenTypes
public int[] getAcceptableTokens()
AbstractCheck
getAcceptableTokens
in class AbstractCheck
TokenTypes
public int[] getRequiredTokens()
AbstractCheck
getRequiredTokens
in class AbstractCheck
TokenTypes
public void beginTree(DetailAST rootAST)
AbstractCheck
beginTree
in class AbstractCheck
rootAST
- the root of the treepublic void visitToken(DetailAST ast)
AbstractCheck
visitToken
in class AbstractCheck
ast
- the token to processpublic void finishTree(DetailAST rootAST)
AbstractCheck
finishTree
in class AbstractCheck
rootAST
- the root of the treeCopyright © 2001-2020. All Rights Reserved.