commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From James Carman <ja...@carmanconsulting.com>
Subject Re: svn commit: r983137 - /commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/ArrayUtils.java
Date Tue, 10 Aug 2010 11:32:54 GMT
FYI, I have reverted the offensive code.  I do not have the time (nor
the desire) to discuss every little commit I make ad-nauseum.

ConstructorUtils fails to compile in trunk right now, btw.

On Tue, Aug 10, 2010 at 5:52 AM, sebb <sebbaz@gmail.com> wrote:
> 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
>
>

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


Mime
View raw message