commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From James Carman <ja...@carmanconsulting.com>
Subject Re: [lang] : Question on Usage of Generics
Date Fri, 06 Aug 2010 22:53:32 GMT
I went ahead and committed it.  If we decide we don't like it, we can
back it out, but I wanted to take care of it while I had the code
open.

On Fri, Aug 6, 2010 at 6:44 PM, James Carman <james@carmanconsulting.com> wrote:
> For instance, this would work:
>
> Map<String, Color> map = toMap(new Object[][] {
>                {"red", Color.red},
>                {"black", Color.black}
>        });
>
>
> On Fri, Aug 6, 2010 at 6:41 PM, James Carman <james@carmanconsulting.com> wrote:
>> What if we change it to:
>>
>> public static <K,V> Map<K, V> toMap(Object[] array)
>>
>> Then, you can use type inference so you don't have to do any casting!
>>
>> On Fri, Aug 6, 2010 at 4:54 PM, Shekhar Gulati
>> <shekhargulati84@gmail.com> wrote:
>>> Hello,
>>>
>>> I have started playing with latest beta release of Commons-Lang 3.0  and I
>>> have question on usage of generics in Commons-lang
>>>
>>> For example, there is a method called toMap in ArrayUtils which could have
>>> been easily generified but isn't
>>>
>>> In Commons-Lang 3.0
>>>
>>> public static Map<Object, Object> toMap(Object[] array) {
>>>        if (array == null) {
>>>            return null;
>>>        }
>>>        final Map<Object, Object> map = new HashMap<Object, Object>((int)
>>> (array.length * 1.5));
>>>        for (int i = 0; i < array.length; i++) {
>>>            Object object = array[i];
>>>            if (object instanceof Map.Entry<?, ?>) {
>>>                Map.Entry<?,?> entry = (Map.Entry<?,?>) object;
>>>                map.put(entry.getKey(), entry.getValue());
>>>            } else if (object instanceof Object[]) {
>>>                Object[] entry = (Object[]) object;
>>>                if (entry.length < 2) {
>>>                    throw new IllegalArgumentException("Array element
" + i
>>> + ", '"
>>>                        + object
>>>                        + "', has a length less than 2");
>>>                }
>>>                map.put(entry[0], entry[1]);
>>>            } else {
>>>                throw new IllegalArgumentException("Array element " +
i + ",
>>> '"
>>>                        + object
>>>                        + "', is neither of type Map.Entry nor an
Array");
>>>            }
>>>        }
>>>        return map;
>>>    }
>>>
>>>
>>>
>>> Fully Generified version of toMap method
>>>
>>> public static <T> Map<T, T> toMap(T[][] array) {
>>> if (array == null) {
>>> return null;
>>> }
>>> final Map<T, T> map = new HashMap<T, T>((int) (array.length * 1.5));
>>> for (int i = 0; i < array.length; i++) {
>>> T[] t = array[i];
>>> if (t[i] instanceof Map.Entry) {
>>> @SuppressWarnings("unchecked")
>>> Map.Entry<T, T> entry = (Map.Entry<T, T>) t[i];
>>> map.put(entry.getKey(), entry.getValue());
>>> } else if (t instanceof Object[]) {
>>> T[] entry = t;
>>> if (entry.length < 2) {
>>> throw new IllegalArgumentException("Array element " + i
>>> + ", '" + t + "', has a length less than 2");
>>> }
>>> map.put(entry[0], entry[1]);
>>> } else {
>>> throw new IllegalArgumentException("Array element " + i + ", '"
>>> + t + "', is neither of type Map.Entry nor an Array");
>>> }
>>> }
>>> return map;
>>> }
>>>
>>> I just thought to ask the Commons-Lang team.. Are there any reason why some
>>> methods are not generified?
>>>
>>>
>>>
>>>
>>> --
>>> Thanks
>>> Shekhar
>>> 09873937317
>>>
>>
>

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


Mime
View raw message