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

Levon Karayan commented on LANG-534:
------------------------------------

I think the advantage of preventing memory fragmentation is a good one and 
would like to keep that feature.   That's harder to do with generics/primitives.

However I also like the idea of having a generic version for everything else, I 
chose not to include it in this patch because my implementation would emit a 
warning during compile, or as Matt pointed out we would have to have the user 
pass it in.   If the user passes in the empty array and there is no benefit  
(actually a disadvantage because your creating garbage for most cases) for 
memory from using the *public static final* data members already in the 
*ArrayUtils* class it defeats the purpose.

{code:title=Generic nullToEmpty}
public static <T> T[] nullToEmpty(T[] array) {
    return (null == array) ? (T[])(new Object[0]) : array;
}
{code}

The problem with this implementation is that you would suddenly have this 
compile time warning:
{code:title=Generic Array Creation Trick Warning}
[WARNING] 
/home/foo/proj/opensource/commonslang/src/java/org/apache/commons/lang/ArrayUtils.java:[438,38]
 [unchecked] unchecked cast
found   : java.lang.Object[]
required: T[]
{code}

I can create a new patch that includes the above if the commiters think that is 
acceptable.



> ArrayUtils should have method to convert null arrays to empty ones to help 
> with Defensive coding
> ------------------------------------------------------------------------------------------------
>
>                 Key: LANG-534
>                 URL: https://issues.apache.org/jira/browse/LANG-534
>             Project: Commons Lang
>          Issue Type: Improvement
>            Reporter: Levon Karayan
>            Priority: Trivial
>         Attachments: 20090920LevonArrayUtils-nullToEmpty.patch
>
>
> There are APIs that I've come across that return <code>null</code> Arrays in 
> the event where there are no results.  Often these APIs correctly throw 
> exceptions when there is an "exceptional event", but no results isn't 
> exceptional, and it often shouldn't be.   This causes the programmer to make 
> extra tests for null throughout the code to deal with the null case, and 
> sometimes these null cases are added after a customer searched for gobleygook 
> and got a NullPointerException.  It's just far cleaner/safer to convert these 
> null arrays to empty arrays.
> Another benefit to this method is that if the array being passed in is 
> actually already an empty array, it will swap the pointer for the 
> <code>static final</code> in the ArrayUtils class to help decrease memory 
> fragmentation.
> e.g.
> BEFORE:
> try
> {
>   results = customer.getResults(query);
> } catch ( IOException ioex ) {
>   //  ...
> }
> if ( null == results )
> {
>    results = new int[0]{};
> }
> // do stuff
> AFTER
> try
> {
>   results = ArrayUtils.nullToEmpty(customer.getResults(query));
> } catch ( IOException ioex ) {
>   //  ...
> }
> // do stuff

-- 
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