commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Duncan Jones (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (LANG-1039) HashCodeBuilder.reflectionHashCode(Object object) returns always the same result for any array
Date Thu, 25 Sep 2014 10:23:33 GMT

    [ https://issues.apache.org/jira/browse/LANG-1039?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14147601#comment-14147601
] 

Duncan Jones commented on LANG-1039:
------------------------------------

The first line in the Javadoc for the {{HashCodeBuilder}} is:

bq. Assists in implementing {{Object.hashCode()}} methods.

In other words. the supported use case is generating a hash code for your own custom class.
You either do this manually by appending fields to the hash code builder, or you use the reflective
builder:

{code:java}
public int hashCode() {
  return HashCodeBuilder.reflectionHashCode(this);
}
{code}

There is no expectation that {{reflectionHashCode()}} will be passed a primitive array object.
I see no reason to change this behaviour, given the documented intention of the class.

> HashCodeBuilder.reflectionHashCode(Object object) returns always the same result for
any array
> ----------------------------------------------------------------------------------------------
>
>                 Key: LANG-1039
>                 URL: https://issues.apache.org/jira/browse/LANG-1039
>             Project: Commons Lang
>          Issue Type: Bug
>          Components: lang.builder.*
>    Affects Versions: 3.3.2
>         Environment: Windows 7, Java 6
>            Reporter: Bartosz Paszkowski
>
> HashCodeBuilder.reflectionHashCode(Object object) returns always the same result for
any array. The result is 17.
> There is no information in javadoc, that this method works in that way.
> The same situation in previous versions.
> *Example:*
> {code}
> public class HashCodeBuilderTest {
>     
>     public static void main(String[] args) {
>         
>         System.out.println(HashCodeBuilder.reflectionHashCode(new double[] {1, 1}));
>         System.out.println(HashCodeBuilder.reflectionHashCode(new double[] {2, 2}));
>         System.out.println(HashCodeBuilder.reflectionHashCode(new int[] {3, 3}));
>         System.out.println(HashCodeBuilder.reflectionHashCode(new int[] {4, 4}));
>         System.out.println(HashCodeBuilder.reflectionHashCode(new Long[] {5L, 5L}));
>         System.out.println(HashCodeBuilder.reflectionHashCode(new Double[] {null, null}));
>         System.out.println(HashCodeBuilder.reflectionHashCode(new Object[] {Boolean.FALSE,
1L, null}));
>         
>     }
> }
> {code}
> *Output:*
> {code}
> 17
> 17
> 17
> 17
> 17
> 17
> 17
> {code}
> *Fix example 1*
> First check if argument obj in HashCodeBuilder.reflectionHashCode(Object obj) is an array
and than use java.util.Arrays.hashCode(Object[] array)



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message