HashCodeBuilder.hashCode() should return the same value as 
HashCodeBuilder.toHashCode()
---------------------------------------------------------------------------------------

                 Key: LANG-520
                 URL: https://issues.apache.org/jira/browse/LANG-520
             Project: Commons Lang
          Issue Type: Improvement
    Affects Versions: 2.4
            Reporter: Paul Martin
            Priority: Minor


HashCodeBuilder's toHashCode() method must currently be used to generate the 
calculated hash code value for an object.  However, this method name 
('toHashCode') is very similar to the standard 'hashCode()' method, which will 
just return the (default) hash code of the HashCodeBuilder object itself.  
Since these names are so similar (and otherwise have the same signature), they 
are easy to confuse.  If this happens, then the hashCode used for an object 
will be that of the HashCodeBuilder, which then will probably not be compatible 
with its 'equals' implementation.  This may result in serious bugs (e.g. memory 
leaks when combined with ToStringBuilder - see LANG-453).

I suggest either:

- Implement HashCodeBuilder.hashCode() to return the same value as 
.toHashCode() (maybe with a logged warning), in which case it will not matter 
if the wrong method is called.  This will still be compatible with 
HashCodeBuilder's equals/hashCode contract, since equals is not implemented, 
and should therefore be relatively backwards-compatible (though the hashCode 
will now change as calls are made to HashCodeBuilder).

- Throw an UnsupportedOperationException in hashCode().  This is more likely to 
break existing code though.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to