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