[
https://issues.apache.org/jira/browse/LANG-575?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12793560#action_12793560
]
Anthony Whitford commented on LANG-575:
---------------------------------------
Note that *EqualsBuilder* has the exact same issue.
See:
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang3/builder/EqualsBuilder.java?view=markup
*reflectionAppend*, line 321:
{code}
List<String> excludedFieldList = excludeFields != null ?
Arrays.asList(excludeFields) : Collections.<String>emptyList();
{code}
And so does *CompareToBuilder*...
See:
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang3/builder/CompareToBuilder.java?view=markup
*reflectionAppend*, line 356:
{code}
List<String> excludedFieldList = excludeFields != null ?
Arrays.asList(excludeFields) : Collections.<String>emptyList();
{code}
> HashCodeBuilder reflectionAppend creates unnecessary copy of excludeFields
> --------------------------------------------------------------------------
>
> Key: LANG-575
> URL: https://issues.apache.org/jira/browse/LANG-575
> Project: Commons Lang
> Issue Type: Bug
> Components: lang.builder.*
> Affects Versions: 2.4
> Environment: Sun Java JDK 1.6.0_17
> Reporter: Anthony Whitford
>
> See
> http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang3/builder/HashCodeBuilder.java?view=markup
> Please review the implementation for *reflectionAppend* (lines 174 to 202)...
> Specifically, see line 182:
> {code}
> List<String> excludedFieldList = excludeFields != null ?
> Arrays.asList(excludeFields) : Collections.<String>emptyList();
> {code}
> Note that if you are in the habit of passing in a String array for excluding
> fields ({{String[] excludeFields}}) -- which is a best practice when using
> Hibernate (to skip primary keys ({...@id}}) and version fields
> ({...@version}}) that change upon persistence) -- _EVERY TIME_ the _hashCode_
> is calculated, an _ArrayList_ is being created -- generating fodder for the
> garbage collector.
> I thought I might get around this by passing a {{Collection<String>}} instead
> of a {{String[]}}, but ironically the implementation of the
> {{reflectionHashCode(Object object, Collection<String> excludeFields)}} (see
> lines 475 to 477), for example, transforms the {{Collection<String>}} into a
> {{String[]}} only to have it transformed internally into a temporary
> {{ArrayList<String>}}.
> I would expect the implementation to use and read what is submitted, whether
> that is a {{String[]}} or a {{Collection<String>}}. I don't think it needs
> to create another copy just to have a convenient {{contains}} method.
> Efficiency is important, especially in the event of rehashing.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.