commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sebb <seb...@gmail.com>
Subject Re: svn commit: r983137 - /commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/ArrayUtils.java
Date Tue, 10 Aug 2010 09:52:39 GMT
On 10 August 2010 10:42, Julien Aymé <julien.ayme@gmail.com> wrote:
> 2010/8/10 sebb <sebbaz@gmail.com>:
>> On 9 August 2010 23:44, James Carman <james@carmanconsulting.com> wrote:
>>> On Mon, Aug 9, 2010 at 7:32 AM, sebb <sebbaz@gmail.com> wrote:
>>>> Why not split the code into two methods:
>>>>
>>>> public static <K,V> Map<K, V> toMap(Map.Entry<K,V>[] array)
>>>> and
>>>> public static <K,V> Map<K, V> toMap(Class<K> keyType, Class<V>
>>>> valueType, Object[][] array)
>>>>
>>>
>>> So, what would that make the "user" code look like?  The whole reason
>>> for this, unless I'm mistaken, was to make it easy to do stuff like:
>>>
>>> public static final Map<String,Color> COLOR_MAP = ArrayUtils.toMap(new
>>> Object[][] {
>>>  { "red", Color.red },
>>>  { "blue", Color.blue }
>>> } );
>>>
>>> To me, we're really trying to make it easier to use this API, right?
>>> So, now the code would look like:
>>>
>>> public static final Map<String,Color> COLOR_MAP =
>>> ArrayUtils.toMap(String.class, Color.class, new Object[][] {
>>>  { "red", Color.red },
>>>  { "blue", Color.blue }
>>> } );
>>>
>>
>> Looks OK to me, and solves the type-safety problem.
>>
>>> This is one of the big gripes about how generics are handled in Java,
>>> you have to repeat yourself so darn much.  What if we told folks to
>>> use a new MapBuilder instead?
>>>
>>> public static final Map<String,Color> COLOR_MAP =
>>> MapUtils.builder().put("red", Color.red).put("blue",
>>> Color.blue).toMap();
>>>
>>> It seems like this "builder" stuff is getting popular these days.
>>> What do you guys think?
>>
>> AFAICT, that does not ensure type-safety, so is no better than the current API.
>>
>
> The builder can ensure type-safety, if the builder itself is generic:

Of course, but the user code will be more verbose.

> MapBuilder<K, V>, with methods:
> - void put(K key, V value)
> - Map<K, V> toMap()
>
> and MapUtils method is:
> public static <K, V> MapBuilder<K, V> builder();
>
> (And the MapBuilder looks awfully a lot like Map ;-) )

But what would the code look like?

Would it be any neater than:

public static final Map<String,Color> COLOR_MAP =
ArrayUtils.toMap(String.class, Color.class, new Object[][] {
 { "red", Color.red },
 { "blue", Color.blue }
} );

I suspect not.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Mime
View raw message