You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ch...@apache.org on 2017/07/11 17:55:18 UTC
[33/77] [abbrv] commons-collections git commit: finish generics
(minus one class)
http://git-wip-us.apache.org/repos/asf/commons-collections/blob/884baf0d/src/java/org/apache/commons/collections/IteratorUtils.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/commons/collections/IteratorUtils.java b/src/java/org/apache/commons/collections/IteratorUtils.java
index c84957f..eba8e37 100644
--- a/src/java/org/apache/commons/collections/IteratorUtils.java
+++ b/src/java/org/apache/commons/collections/IteratorUtils.java
@@ -81,26 +81,30 @@ public class IteratorUtils {
* WARNING: This constant is binary incompatible with Commons Collections 2.1 and 2.1.1.
* Use <code>EmptyIterator.INSTANCE</code> for compatability with Commons Collections 2.1.1.
*/
- public static final ResettableIterator EMPTY_ITERATOR = EmptyIterator.RESETTABLE_INSTANCE;
+ public static final ResettableIterator<Object> EMPTY_ITERATOR = EmptyIterator.RESETTABLE_INSTANCE;
+
/**
* A list iterator over no elements.
* <p>
* WARNING: This constant is binary incompatible with Commons Collections 2.1 and 2.1.1.
* Use <code>EmptyListIterator.INSTANCE</code> for compatability with Commons Collections 2.1.1.
*/
- public static final ResettableListIterator EMPTY_LIST_ITERATOR = EmptyListIterator.RESETTABLE_INSTANCE;
+ public static final ResettableListIterator<Object> EMPTY_LIST_ITERATOR = EmptyListIterator.RESETTABLE_INSTANCE;
+
/**
* An ordered iterator over no elements.
*/
- public static final OrderedIterator EMPTY_ORDERED_ITERATOR = EmptyOrderedIterator.INSTANCE;
+ public static final OrderedIterator<Object> EMPTY_ORDERED_ITERATOR = EmptyOrderedIterator.INSTANCE;
+
/**
* A map iterator over no elements.
*/
- public static final MapIterator EMPTY_MAP_ITERATOR = EmptyMapIterator.INSTANCE;
+ public static final MapIterator<Object, Object> EMPTY_MAP_ITERATOR = EmptyMapIterator.INSTANCE;
+
/**
* An ordered map iterator over no elements.
*/
- public static final OrderedMapIterator EMPTY_ORDERED_MAP_ITERATOR = EmptyOrderedMapIterator.INSTANCE;
+ public static final OrderedMapIterator<Object, Object> EMPTY_ORDERED_MAP_ITERATOR = EmptyOrderedMapIterator.INSTANCE;
/**
* IteratorUtils is not normally instantiated.
@@ -121,8 +125,8 @@ public class IteratorUtils {
*
* @return an iterator over nothing
*/
- public static ResettableIterator emptyIterator() {
- return EMPTY_ITERATOR;
+ public static <E> ResettableIterator<E> emptyIterator() {
+ return EmptyIterator.<E>getResettableInstance();
}
/**
@@ -136,8 +140,8 @@ public class IteratorUtils {
*
* @return a list iterator over nothing
*/
- public static ResettableListIterator emptyListIterator() {
- return EMPTY_LIST_ITERATOR;
+ public static <E> ResettableListIterator<E> emptyListIterator() {
+ return EmptyListIterator.<E>getResettableInstance();
}
/**
@@ -148,8 +152,8 @@ public class IteratorUtils {
*
* @return an ordered iterator over nothing
*/
- public static OrderedIterator emptyOrderedIterator() {
- return EMPTY_ORDERED_ITERATOR;
+ public static <E> OrderedIterator<E> emptyOrderedIterator() {
+ return EmptyOrderedIterator.<E>getInstance();
}
/**
@@ -160,8 +164,8 @@ public class IteratorUtils {
*
* @return a map iterator over nothing
*/
- public static MapIterator emptyMapIterator() {
- return EMPTY_MAP_ITERATOR;
+ public static <K, V> MapIterator<K, V> emptyMapIterator() {
+ return EmptyMapIterator.<K, V>getInstance();
}
/**
@@ -172,8 +176,8 @@ public class IteratorUtils {
*
* @return a map iterator over nothing
*/
- public static OrderedMapIterator emptyOrderedMapIterator() {
- return EMPTY_ORDERED_MAP_ITERATOR;
+ public static <K, V> OrderedMapIterator<K, V> emptyOrderedMapIterator() {
+ return EmptyOrderedMapIterator.<K, V>getInstance();
}
// Singleton
@@ -190,8 +194,8 @@ public class IteratorUtils {
* @param object the single object over which to iterate
* @return a singleton iterator over the object
*/
- public static ResettableIterator singletonIterator(Object object) {
- return new SingletonIterator(object);
+ public static <E> ResettableIterator<E> singletonIterator(E object) {
+ return new SingletonIterator<E>(object);
}
/**
@@ -203,8 +207,8 @@ public class IteratorUtils {
* @param object the single object over which to iterate
* @return a singleton list iterator over the object
*/
- public static ListIterator singletonListIterator(Object object) {
- return new SingletonListIterator(object);
+ public static <E> ListIterator<E> singletonListIterator(E object) {
+ return new SingletonListIterator<E>(object);
}
// Arrays
@@ -219,8 +223,8 @@ public class IteratorUtils {
* @return an iterator over the array
* @throws NullPointerException if array is null
*/
- public static ResettableIterator arrayIterator(Object[] array) {
- return new ObjectArrayIterator(array);
+ public static <E> ResettableIterator<E> arrayIterator(E[] array) {
+ return new ObjectArrayIterator<E>(array);
}
/**
@@ -234,8 +238,8 @@ public class IteratorUtils {
* @throws IllegalArgumentException if the array is not an array
* @throws NullPointerException if array is null
*/
- public static ResettableIterator arrayIterator(Object array) {
- return new ArrayIterator(array);
+ public static <E> ResettableIterator<E> arrayIterator(Object array) {
+ return new ArrayIterator<E>(array);
}
/**
@@ -251,8 +255,8 @@ public class IteratorUtils {
* than the length of the array
* @throws NullPointerException if array is null
*/
- public static ResettableIterator arrayIterator(Object[] array, int start) {
- return new ObjectArrayIterator(array, start);
+ public static <E> ResettableIterator<E> arrayIterator(E[] array, int start) {
+ return new ObjectArrayIterator<E>(array, start);
}
/**
@@ -269,8 +273,8 @@ public class IteratorUtils {
* than the length of the array
* @throws NullPointerException if array is null
*/
- public static ResettableIterator arrayIterator(Object array, int start) {
- return new ArrayIterator(array, start);
+ public static <E> ResettableIterator<E> arrayIterator(Object array, int start) {
+ return new ArrayIterator<E>(array, start);
}
/**
@@ -287,8 +291,8 @@ public class IteratorUtils {
* @throws IllegalArgumentException if end is before start
* @throws NullPointerException if array is null
*/
- public static ResettableIterator arrayIterator(Object[] array, int start, int end) {
- return new ObjectArrayIterator(array, start, end);
+ public static <E> ResettableIterator<E> arrayIterator(E[] array, int start, int end) {
+ return new ObjectArrayIterator<E>(array, start, end);
}
/**
@@ -306,8 +310,8 @@ public class IteratorUtils {
* @throws IllegalArgumentException if end is before start
* @throws NullPointerException if array is null
*/
- public static ResettableIterator arrayIterator(Object array, int start, int end) {
- return new ArrayIterator(array, start, end);
+ public static <E> ResettableIterator<E> arrayIterator(Object array, int start, int end) {
+ return new ArrayIterator<E>(array, start, end);
}
//-----------------------------------------------------------------------
@@ -318,8 +322,8 @@ public class IteratorUtils {
* @return a list iterator over the array
* @throws NullPointerException if array is null
*/
- public static ResettableListIterator arrayListIterator(Object[] array) {
- return new ObjectArrayListIterator(array);
+ public static <E> ResettableListIterator<E> arrayListIterator(E[] array) {
+ return new ObjectArrayListIterator<E>(array);
}
/**
@@ -333,8 +337,8 @@ public class IteratorUtils {
* @throws IllegalArgumentException if the array is not an array
* @throws NullPointerException if array is null
*/
- public static ResettableListIterator arrayListIterator(Object array) {
- return new ArrayListIterator(array);
+ public static <E> ResettableListIterator<E> arrayListIterator(Object array) {
+ return new ArrayListIterator<E>(array);
}
/**
@@ -346,8 +350,8 @@ public class IteratorUtils {
* @throws IndexOutOfBoundsException if start is less than zero
* @throws NullPointerException if array is null
*/
- public static ResettableListIterator arrayListIterator(Object[] array, int start) {
- return new ObjectArrayListIterator(array, start);
+ public static <E> ResettableListIterator<E> arrayListIterator(E[] array, int start) {
+ return new ObjectArrayListIterator<E>(array, start);
}
/**
@@ -363,8 +367,8 @@ public class IteratorUtils {
* @throws IndexOutOfBoundsException if start is less than zero
* @throws NullPointerException if array is null
*/
- public static ResettableListIterator arrayListIterator(Object array, int start) {
- return new ArrayListIterator(array, start);
+ public static <E> ResettableListIterator<E> arrayListIterator(Object array, int start) {
+ return new ArrayListIterator<E>(array, start);
}
/**
@@ -378,8 +382,8 @@ public class IteratorUtils {
* @throws IllegalArgumentException if end is before start
* @throws NullPointerException if array is null
*/
- public static ResettableListIterator arrayListIterator(Object[] array, int start, int end) {
- return new ObjectArrayListIterator(array, start, end);
+ public static <E> ResettableListIterator<E> arrayListIterator(E[] array, int start, int end) {
+ return new ObjectArrayListIterator<E>(array, start, end);
}
/**
@@ -397,8 +401,8 @@ public class IteratorUtils {
* @throws IllegalArgumentException if end is before start
* @throws NullPointerException if array is null
*/
- public static ResettableListIterator arrayListIterator(Object array, int start, int end) {
- return new ArrayListIterator(array, start, end);
+ public static <E> ResettableListIterator<E> arrayListIterator(Object array, int start, int end) {
+ return new ArrayListIterator<E>(array, start, end);
}
// Unmodifiable
@@ -411,7 +415,7 @@ public class IteratorUtils {
* @param iterator the iterator to make immutable
* @return an immutable version of the iterator
*/
- public static Iterator unmodifiableIterator(Iterator iterator) {
+ public static <E> Iterator<E> unmodifiableIterator(Iterator<E> iterator) {
return UnmodifiableIterator.decorate(iterator);
}
@@ -424,7 +428,7 @@ public class IteratorUtils {
* @param listIterator the iterator to make immutable
* @return an immutable version of the iterator
*/
- public static ListIterator unmodifiableListIterator(ListIterator listIterator) {
+ public static <E> ListIterator<E> unmodifiableListIterator(ListIterator<E> listIterator) {
return UnmodifiableListIterator.decorate(listIterator);
}
@@ -436,7 +440,7 @@ public class IteratorUtils {
* @param mapIterator the iterator to make immutable
* @return an immutable version of the iterator
*/
- public static MapIterator unmodifiableMapIterator(MapIterator mapIterator) {
+ public static <K, V> MapIterator<K, V> unmodifiableMapIterator(MapIterator<K, V> mapIterator) {
return UnmodifiableMapIterator.decorate(mapIterator);
}
@@ -451,8 +455,8 @@ public class IteratorUtils {
* @return a combination iterator over the iterators
* @throws NullPointerException if either iterator is null
*/
- public static Iterator chainedIterator(Iterator iterator1, Iterator iterator2) {
- return new IteratorChain(iterator1, iterator2);
+ public static <E> Iterator<E> chainedIterator(Iterator<? extends E> iterator1, Iterator<? extends E> iterator2) {
+ return new IteratorChain<E>(iterator1, iterator2);
}
/**
@@ -463,8 +467,8 @@ public class IteratorUtils {
* @return a combination iterator over the iterators
* @throws NullPointerException if iterators array is null or contains a null
*/
- public static Iterator chainedIterator(Iterator[] iterators) {
- return new IteratorChain(iterators);
+ public static <E> Iterator<E> chainedIterator(Iterator<? extends E>[] iterators) {
+ return new IteratorChain<E>(iterators);
}
/**
@@ -476,8 +480,8 @@ public class IteratorUtils {
* @throws NullPointerException if iterators collection is null or contains a null
* @throws ClassCastException if the iterators collection contains the wrong object type
*/
- public static Iterator chainedIterator(Collection iterators) {
- return new IteratorChain(iterators);
+ public static <E> Iterator<E> chainedIterator(Collection<Iterator<? extends E>> iterators) {
+ return new IteratorChain<E>(iterators);
}
// Collated
@@ -498,8 +502,8 @@ public class IteratorUtils {
* @return a combination iterator over the iterators
* @throws NullPointerException if either iterator is null
*/
- public static Iterator collatedIterator(Comparator comparator, Iterator iterator1, Iterator iterator2) {
- return new CollatingIterator(comparator, iterator1, iterator2);
+ public static <E> Iterator<E> collatedIterator(Comparator<? super E> comparator, Iterator<? extends E> iterator1, Iterator<? extends E> iterator2) {
+ return new CollatingIterator<E>(comparator, iterator1, iterator2);
}
/**
@@ -517,8 +521,8 @@ public class IteratorUtils {
* @return a combination iterator over the iterators
* @throws NullPointerException if iterators array is null or contains a null
*/
- public static Iterator collatedIterator(Comparator comparator, Iterator[] iterators) {
- return new CollatingIterator(comparator, iterators);
+ public static <E> Iterator<E> collatedIterator(Comparator<? super E> comparator, Iterator<? extends E>[] iterators) {
+ return new CollatingIterator<E>(comparator, iterators);
}
/**
@@ -537,8 +541,9 @@ public class IteratorUtils {
* @throws NullPointerException if iterators collection is null or contains a null
* @throws ClassCastException if the iterators collection contains the wrong object type
*/
- public static Iterator collatedIterator(Comparator comparator, Collection iterators) {
- return new CollatingIterator(comparator, iterators);
+ public static <E> Iterator<E> collatedIterator(Comparator<? super E> comparator,
+ Collection<Iterator<? extends E>> iterators) {
+ return new CollatingIterator<E>(comparator, iterators);
}
// Object Graph
@@ -596,8 +601,8 @@ public class IteratorUtils {
* @return a new object graph iterator
* @since Commons Collections 3.1
*/
- public static Iterator objectGraphIterator(Object root, Transformer transformer) {
- return new ObjectGraphIterator(root, transformer);
+ public static <E> Iterator<E> objectGraphIterator(E root, Transformer<? super E, ? extends E> transformer) {
+ return new ObjectGraphIterator<E>(root, transformer);
}
// Transformed
@@ -613,14 +618,14 @@ public class IteratorUtils {
* @return a new transforming iterator
* @throws NullPointerException if either parameter is null
*/
- public static Iterator transformedIterator(Iterator iterator, Transformer transform) {
+ public static <I, O> Iterator<O> transformedIterator(Iterator<? extends I> iterator, Transformer<? super I, ? extends O> transform) {
if (iterator == null) {
throw new NullPointerException("Iterator must not be null");
}
if (transform == null) {
throw new NullPointerException("Transformer must not be null");
}
- return new TransformIterator(iterator, transform);
+ return new TransformIterator<I, O>(iterator, transform);
}
// Filtered
@@ -636,14 +641,14 @@ public class IteratorUtils {
* @return a new filtered iterator
* @throws NullPointerException if either parameter is null
*/
- public static Iterator filteredIterator(Iterator iterator, Predicate predicate) {
+ public static <E> Iterator<E> filteredIterator(Iterator<? extends E> iterator, Predicate<? super E> predicate) {
if (iterator == null) {
throw new NullPointerException("Iterator must not be null");
}
if (predicate == null) {
throw new NullPointerException("Predicate must not be null");
}
- return new FilterIterator(iterator, predicate);
+ return new FilterIterator<E>(iterator, predicate);
}
/**
@@ -657,14 +662,14 @@ public class IteratorUtils {
* @return a new filtered iterator
* @throws NullPointerException if either parameter is null
*/
- public static ListIterator filteredListIterator(ListIterator listIterator, Predicate predicate) {
+ public static <E> ListIterator<E> filteredListIterator(ListIterator<? extends E> listIterator, Predicate<? super E> predicate) {
if (listIterator == null) {
throw new NullPointerException("ListIterator must not be null");
}
if (predicate == null) {
throw new NullPointerException("Predicate must not be null");
}
- return new FilterListIterator(listIterator, predicate);
+ return new FilterListIterator<E>(listIterator, predicate);
}
// Looping
@@ -680,11 +685,11 @@ public class IteratorUtils {
* @return a new looping iterator
* @throws NullPointerException if the collection is null
*/
- public static ResettableIterator loopingIterator(Collection coll) {
+ public static <E> ResettableIterator<E> loopingIterator(Collection<? extends E> coll) {
if (coll == null) {
throw new NullPointerException("Collection must not be null");
}
- return new LoopingIterator(coll);
+ return new LoopingIterator<E>(coll);
}
/**
@@ -698,13 +703,13 @@ public class IteratorUtils {
* @throws NullPointerException if the list is null
* @since Commons Collections 3.2
*/
- public static ResettableListIterator loopingListIterator(List list) {
+ public static <E> ResettableListIterator<E> loopingListIterator(List<E> list) {
if (list == null) {
throw new NullPointerException("List must not be null");
}
- return new LoopingListIterator(list);
+ return new LoopingListIterator<E>(list);
}
-
+
// Views
//-----------------------------------------------------------------------
/**
@@ -713,11 +718,11 @@ public class IteratorUtils {
* @param enumeration the enumeration to use
* @return a new iterator
*/
- public static Iterator asIterator(Enumeration enumeration) {
+ public static <E> Iterator<E> asIterator(Enumeration<? extends E> enumeration) {
if (enumeration == null) {
throw new NullPointerException("Enumeration must not be null");
}
- return new EnumerationIterator(enumeration);
+ return new EnumerationIterator<E>(enumeration);
}
/**
@@ -728,14 +733,14 @@ public class IteratorUtils {
* @param removeCollection the collection to remove elements from
* @return a new iterator
*/
- public static Iterator asIterator(Enumeration enumeration, Collection removeCollection) {
+ public static <E> Iterator<E> asIterator(Enumeration<? extends E> enumeration, Collection<? super E> removeCollection) {
if (enumeration == null) {
throw new NullPointerException("Enumeration must not be null");
}
if (removeCollection == null) {
throw new NullPointerException("Collection must not be null");
}
- return new EnumerationIterator(enumeration, removeCollection);
+ return new EnumerationIterator<E>(enumeration, removeCollection);
}
/**
@@ -745,11 +750,11 @@ public class IteratorUtils {
* @return a new enumeration
* @throws NullPointerException if iterator is null
*/
- public static Enumeration asEnumeration(Iterator iterator) {
+ public static <E> Enumeration<E> asEnumeration(Iterator<? extends E> iterator) {
if (iterator == null) {
throw new NullPointerException("Iterator must not be null");
}
- return new IteratorEnumeration(iterator);
+ return new IteratorEnumeration<E>(iterator);
}
/**
@@ -762,11 +767,11 @@ public class IteratorUtils {
* @return a new iterator
* @throws NullPointerException if iterator parameter is null
*/
- public static ListIterator toListIterator(Iterator iterator) {
+ public static <E> ListIterator<E> toListIterator(Iterator<? extends E> iterator) {
if (iterator == null) {
throw new NullPointerException("Iterator must not be null");
}
- return new ListIteratorWrapper(iterator);
+ return new ListIteratorWrapper<E>(iterator);
}
/**
@@ -779,14 +784,14 @@ public class IteratorUtils {
* @return an array of the iterator contents
* @throws NullPointerException if iterator parameter is null
*/
- public static Object[] toArray(Iterator iterator) {
+ public static Object[] toArray(Iterator<?> iterator) {
if (iterator == null) {
throw new NullPointerException("Iterator must not be null");
}
- List list = toList(iterator, 100);
+ List<?> list = toList(iterator, 100);
return list.toArray();
}
-
+
/**
* Gets an array based on an iterator.
* <p>
@@ -800,15 +805,16 @@ public class IteratorUtils {
* @throws NullPointerException if arrayClass is null
* @throws ClassCastException if the arrayClass is invalid
*/
- public static Object[] toArray(Iterator iterator, Class arrayClass) {
+ @SuppressWarnings("unchecked")
+ public static <E> E[] toArray(Iterator<? extends E> iterator, Class<E> arrayClass) {
if (iterator == null) {
throw new NullPointerException("Iterator must not be null");
}
if (arrayClass == null) {
throw new NullPointerException("Array class must not be null");
}
- List list = toList(iterator, 100);
- return list.toArray((Object[]) Array.newInstance(arrayClass, list.size()));
+ List<E> list = toList(iterator, 100);
+ return list.toArray((E[]) Array.newInstance(arrayClass, list.size()));
}
/**
@@ -821,10 +827,10 @@ public class IteratorUtils {
* @return a list of the iterator contents
* @throws NullPointerException if iterator parameter is null
*/
- public static List toList(Iterator iterator) {
+ public static <E> List<E> toList(Iterator<? extends E> iterator) {
return toList(iterator, 10);
}
-
+
/**
* Gets a list based on an iterator.
* <p>
@@ -837,14 +843,14 @@ public class IteratorUtils {
* @throws NullPointerException if iterator parameter is null
* @throws IllegalArgumentException if the size is less than 1
*/
- public static List toList(Iterator iterator, int estimatedSize) {
+ public static <E> List<E> toList(Iterator<? extends E> iterator, int estimatedSize) {
if (iterator == null) {
throw new NullPointerException("Iterator must not be null");
}
if (estimatedSize < 1) {
throw new IllegalArgumentException("Estimated size must be greater than 0");
}
- List list = new ArrayList(estimatedSize);
+ List<E> list = new ArrayList<E>(estimatedSize);
while (iterator.hasNext()) {
list.add(iterator.next());
}
@@ -854,7 +860,7 @@ public class IteratorUtils {
/**
* Gets a suitable Iterator for the given object.
* <p>
- * This method can handles objects as follows
+ * This method can handle objects as follows
* <ul>
* <li>null - empty iterator
* <li>Iterator - returned directly
@@ -870,45 +876,44 @@ public class IteratorUtils {
* @param obj the object to convert to an iterator
* @return a suitable iterator, never null
*/
- public static Iterator getIterator(Object obj) {
+ @SuppressWarnings("unchecked")
+ public static Iterator<?> getIterator(Object obj) {
if (obj == null) {
return emptyIterator();
-
- } else if (obj instanceof Iterator) {
+ }
+ if (obj instanceof Iterator) {
return (Iterator) obj;
-
- } else if (obj instanceof Collection) {
+ }
+ if (obj instanceof Collection) {
return ((Collection) obj).iterator();
-
- } else if (obj instanceof Object[]) {
+ }
+ if (obj instanceof Object[]) {
return new ObjectArrayIterator((Object[]) obj);
-
- } else if (obj instanceof Enumeration) {
+ }
+ if (obj instanceof Enumeration) {
return new EnumerationIterator((Enumeration) obj);
-
- } else if (obj instanceof Map) {
+ }
+ if (obj instanceof Map) {
return ((Map) obj).values().iterator();
-
- } else if (obj instanceof Dictionary) {
+ }
+ if (obj instanceof Dictionary) {
return new EnumerationIterator(((Dictionary) obj).elements());
-
- } else if (obj != null && obj.getClass().isArray()) {
+ }
+ if (obj != null && obj.getClass().isArray()) {
return new ArrayIterator(obj);
-
- } else {
- try {
- Method method = obj.getClass().getMethod("iterator", (Class[]) null);
- if (Iterator.class.isAssignableFrom(method.getReturnType())) {
- Iterator it = (Iterator) method.invoke(obj, (Object[]) null);
- if (it != null) {
- return it;
- }
+ }
+ try {
+ Method method = obj.getClass().getMethod("iterator", (Class[]) null);
+ if (Iterator.class.isAssignableFrom(method.getReturnType())) {
+ Iterator it = (Iterator) method.invoke(obj, (Object[]) null);
+ if (it != null) {
+ return it;
}
- } catch (Exception ex) {
- // ignore
}
- return singletonIterator(obj);
+ } catch (Exception ex) {
+ // ignore
}
+ return singletonIterator(obj);
}
}
http://git-wip-us.apache.org/repos/asf/commons-collections/blob/884baf0d/src/java/org/apache/commons/collections/ListUtils.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/commons/collections/ListUtils.java b/src/java/org/apache/commons/collections/ListUtils.java
index b138717..fc5868d 100644
--- a/src/java/org/apache/commons/collections/ListUtils.java
+++ b/src/java/org/apache/commons/collections/ListUtils.java
@@ -49,8 +49,8 @@ public class ListUtils {
* This uses the {@link Collections Collections} implementation
* and is provided for completeness.
*/
- public static final List EMPTY_LIST = Collections.EMPTY_LIST;
-
+ public static final List<Object> EMPTY_LIST = Collections.<Object>emptyList();
+
/**
* <code>ListUtils</code> should not normally be instantiated.
*/
@@ -67,18 +67,14 @@ public class ListUtils {
* @return the intersection of those two lists
* @throws NullPointerException if either list is null
*/
- public static List intersection(final List list1, final List list2) {
- final List result = new ArrayList();
- final Iterator iterator = list2.iterator();
-
- while (iterator.hasNext()) {
- final Object o = iterator.next();
+ public static <E> List<E> intersection(final List<? extends E> list1, final List<? extends E> list2) {
+ final List<E> result = new ArrayList<E>();
- if (list1.contains(o)) {
- result.add(o);
+ for (E e : list2) {
+ if (list1.contains(e)) {
+ result.add(e);
}
}
-
return result;
}
@@ -97,14 +93,11 @@ public class ListUtils {
* @return a new list containing the results
* @throws NullPointerException if either list is null
*/
- public static List subtract(final List list1, final List list2) {
- final ArrayList result = new ArrayList(list1);
- final Iterator iterator = list2.iterator();
-
- while (iterator.hasNext()) {
- result.remove(iterator.next());
+ public static <E> List<E> subtract(final List<E> list1, final List<? extends E> list2) {
+ final ArrayList<E> result = new ArrayList<E>(list1);
+ for (E e : list2) {
+ result.remove(e);
}
-
return result;
}
@@ -117,7 +110,7 @@ public class ListUtils {
* @return a new list containing the sum of those lists
* @throws NullPointerException if either list is null
*/
- public static List sum(final List list1, final List list2) {
+ public static <E> List<E> sum(final List<? extends E> list1, final List<? extends E> list2) {
return subtract(union(list1, list2), intersection(list1, list2));
}
@@ -131,8 +124,8 @@ public class ListUtils {
* @return a new list containing the union of those lists
* @throws NullPointerException if either list is null
*/
- public static List union(final List list1, final List list2) {
- final ArrayList result = new ArrayList(list1);
+ public static <E> List<E> union(final List<? extends E> list1, final List<? extends E> list2) {
+ final ArrayList<E> result = new ArrayList<E>(list1);
result.addAll(list2);
return result;
}
@@ -166,7 +159,7 @@ public class ListUtils {
* @param list2 the second list, may be null
* @return whether the lists are equal by value comparison
*/
- public static boolean isEqualList(final Collection list1, final Collection list2) {
+ public static boolean isEqualList(final Collection<?> list1, final Collection<?> list2) {
if (list1 == list2) {
return true;
}
@@ -174,8 +167,8 @@ public class ListUtils {
return false;
}
- Iterator it1 = list1.iterator();
- Iterator it2 = list2.iterator();
+ Iterator<?> it1 = list1.iterator();
+ Iterator<?> it2 = list2.iterator();
Object obj1 = null;
Object obj2 = null;
@@ -306,7 +299,7 @@ public class ListUtils {
* @return an unmodifiable list backed by the given list
* @throws IllegalArgumentException if the list is null
*/
- public static <E> List unmodifiableList(List<E> list) {
+ public static <E> List<E> unmodifiableList(List<E> list) {
return UnmodifiableList.decorate(list);
}
@@ -339,7 +332,7 @@ public class ListUtils {
* @return a transformed list backed by the given list
* @throws IllegalArgumentException if the List or Transformer is null
*/
- public static List transformedList(List list, Transformer transformer) {
+ public static <E> List<E> transformedList(List<E> list, Transformer<? super E, ? extends E> transformer) {
return TransformedList.decorate(list, transformer);
}
@@ -372,7 +365,7 @@ public class ListUtils {
* @return a lazy list backed by the given list
* @throws IllegalArgumentException if the List or Factory is null
*/
- public static List lazyList(List list, Factory factory) {
+ public static <E> List<E> lazyList(List<E> list, Factory<? extends E> factory) {
return LazyList.decorate(list, factory);
}
@@ -386,7 +379,7 @@ public class ListUtils {
* @return a fixed-size list backed by that list
* @throws IllegalArgumentException if the List is null
*/
- public static List fixedSizeList(List list) {
+ public static <E> List<E> fixedSizeList(List<E> list) {
return FixedSizeList.decorate(list);
}
http://git-wip-us.apache.org/repos/asf/commons-collections/blob/884baf0d/src/java/org/apache/commons/collections/MapUtils.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/commons/collections/MapUtils.java b/src/java/org/apache/commons/collections/MapUtils.java
index 6ea9434..b3c33a9 100644
--- a/src/java/org/apache/commons/collections/MapUtils.java
+++ b/src/java/org/apache/commons/collections/MapUtils.java
@@ -19,6 +19,7 @@ package org.apache.commons.collections;
import java.io.PrintStream;
import java.text.NumberFormat;
import java.text.ParseException;
+import java.util.Collection;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
@@ -91,12 +92,14 @@ public class MapUtils {
* An empty unmodifiable map.
* This was not provided in JDK1.2.
*/
- public static final Map EMPTY_MAP = UnmodifiableMap.decorate(new HashMap(1));
+ public static final Map<Object, Object> EMPTY_MAP = UnmodifiableMap.decorate(new HashMap<Object, Object>(1));
+
/**
* An empty unmodifiable sorted map.
* This is not provided in the JDK.
*/
- public static final SortedMap EMPTY_SORTED_MAP = UnmodifiableSortedMap.decorate(new TreeMap());
+ public static final SortedMap<Object, Object> EMPTY_SORTED_MAP = UnmodifiableSortedMap.decorate(new TreeMap<Object, Object>());
+
/**
* String used to indent the verbose and debug Map prints.
*/
@@ -107,7 +110,7 @@ public class MapUtils {
*/
public MapUtils() {
}
-
+
// Type safe getters
//-------------------------------------------------------------------------
/**
@@ -117,7 +120,7 @@ public class MapUtils {
* @param key the key to look up
* @return the value in the Map, <code>null</code> if null map input
*/
- public static Object getObject(final Map map, final Object key) {
+ public static <K, V> V getObject(final Map<? super K, V> map, final K key) {
if (map != null) {
return map.get(key);
}
@@ -133,7 +136,7 @@ public class MapUtils {
* @param key the key to look up
* @return the value in the Map as a String, <code>null</code> if null map input
*/
- public static String getString(final Map map, final Object key) {
+ public static <K> String getString(final Map<? super K, ?> map, final K key) {
if (map != null) {
Object answer = map.get(key);
if (answer != null) {
@@ -157,17 +160,17 @@ public class MapUtils {
* @param key the key to look up
* @return the value in the Map as a Boolean, <code>null</code> if null map input
*/
- public static Boolean getBoolean(final Map map, final Object key) {
+ public static <K> Boolean getBoolean(final Map<? super K, ?> map, final K key) {
if (map != null) {
Object answer = map.get(key);
if (answer != null) {
if (answer instanceof Boolean) {
return (Boolean) answer;
-
- } else if (answer instanceof String) {
+ }
+ if (answer instanceof String) {
return new Boolean((String) answer);
-
- } else if (answer instanceof Number) {
+ }
+ if (answer instanceof Number) {
Number n = (Number) answer;
return (n.intValue() != 0) ? Boolean.TRUE : Boolean.FALSE;
}
@@ -189,18 +192,17 @@ public class MapUtils {
* @param key the key to look up
* @return the value in the Map as a Number, <code>null</code> if null map input
*/
- public static Number getNumber(final Map map, final Object key) {
+ public static <K> Number getNumber(final Map<? super K, ?> map, final K key) {
if (map != null) {
Object answer = map.get(key);
if (answer != null) {
if (answer instanceof Number) {
return (Number) answer;
-
- } else if (answer instanceof String) {
+ }
+ if (answer instanceof String) {
try {
String text = (String) answer;
return NumberFormat.getInstance().parse(text);
-
} catch (ParseException e) {
logInfo(e);
}
@@ -219,11 +221,12 @@ public class MapUtils {
* @param key the key to look up
* @return the value in the Map as a Byte, <code>null</code> if null map input
*/
- public static Byte getByte(final Map map, final Object key) {
+ public static <K> Byte getByte(final Map<? super K, ?> map, final K key) {
Number answer = getNumber(map, key);
if (answer == null) {
return null;
- } else if (answer instanceof Byte) {
+ }
+ if (answer instanceof Byte) {
return (Byte) answer;
}
return new Byte(answer.byteValue());
@@ -238,11 +241,12 @@ public class MapUtils {
* @param key the key to look up
* @return the value in the Map as a Short, <code>null</code> if null map input
*/
- public static Short getShort(final Map map, final Object key) {
+ public static <K> Short getShort(final Map<? super K, ?> map, final K key) {
Number answer = getNumber(map, key);
if (answer == null) {
return null;
- } else if (answer instanceof Short) {
+ }
+ if (answer instanceof Short) {
return (Short) answer;
}
return new Short(answer.shortValue());
@@ -257,11 +261,12 @@ public class MapUtils {
* @param key the key to look up
* @return the value in the Map as a Integer, <code>null</code> if null map input
*/
- public static Integer getInteger(final Map map, final Object key) {
+ public static <K> Integer getInteger(final Map<? super K, ?> map, final K key) {
Number answer = getNumber(map, key);
if (answer == null) {
return null;
- } else if (answer instanceof Integer) {
+ }
+ if (answer instanceof Integer) {
return (Integer) answer;
}
return new Integer(answer.intValue());
@@ -276,11 +281,12 @@ public class MapUtils {
* @param key the key to look up
* @return the value in the Map as a Long, <code>null</code> if null map input
*/
- public static Long getLong(final Map map, final Object key) {
+ public static <K> Long getLong(final Map<? super K, ?> map, final K key) {
Number answer = getNumber(map, key);
if (answer == null) {
return null;
- } else if (answer instanceof Long) {
+ }
+ if (answer instanceof Long) {
return (Long) answer;
}
return new Long(answer.longValue());
@@ -295,11 +301,12 @@ public class MapUtils {
* @param key the key to look up
* @return the value in the Map as a Float, <code>null</code> if null map input
*/
- public static Float getFloat(final Map map, final Object key) {
+ public static <K> Float getFloat(final Map<? super K, ?> map, final K key) {
Number answer = getNumber(map, key);
if (answer == null) {
return null;
- } else if (answer instanceof Float) {
+ }
+ if (answer instanceof Float) {
return (Float) answer;
}
return new Float(answer.floatValue());
@@ -314,11 +321,12 @@ public class MapUtils {
* @param key the key to look up
* @return the value in the Map as a Double, <code>null</code> if null map input
*/
- public static Double getDouble(final Map map, final Object key) {
+ public static <K> Double getDouble(final Map<? super K, ?> map, final K key) {
Number answer = getNumber(map, key);
if (answer == null) {
return null;
- } else if (answer instanceof Double) {
+ }
+ if (answer instanceof Double) {
return (Double) answer;
}
return new Double(answer.doubleValue());
@@ -334,11 +342,11 @@ public class MapUtils {
* @param key the key to look up
* @return the value in the Map as a Map, <code>null</code> if null map input
*/
- public static Map getMap(final Map map, final Object key) {
+ public static <K> Map<?, ?> getMap(final Map<? super K, ?> map, final K key) {
if (map != null) {
Object answer = map.get(key);
if (answer != null && answer instanceof Map) {
- return (Map) answer;
+ return (Map<?, ?>) answer;
}
}
return null;
@@ -356,10 +364,10 @@ public class MapUtils {
* @return the value in the map, or defaultValue if the original value
* is null or the map is null
*/
- public static Object getObject( Map map, Object key, Object defaultValue ) {
- if ( map != null ) {
- Object answer = map.get( key );
- if ( answer != null ) {
+ public static <K, V> V getObject(Map<K, V> map, K key, V defaultValue) {
+ if (map != null) {
+ V answer = map.get(key);
+ if (answer != null) {
return answer;
}
}
@@ -378,9 +386,9 @@ public class MapUtils {
* original value is null, the map is null or the string conversion
* fails
*/
- public static String getString( Map map, Object key, String defaultValue ) {
- String answer = getString( map, key );
- if ( answer == null ) {
+ public static <K> String getString(Map<? super K, ?> map, K key, String defaultValue) {
+ String answer = getString(map, key);
+ if (answer == null) {
answer = defaultValue;
}
return answer;
@@ -398,9 +406,9 @@ public class MapUtils {
* original value is null, the map is null or the boolean conversion
* fails
*/
- public static Boolean getBoolean( Map map, Object key, Boolean defaultValue ) {
- Boolean answer = getBoolean( map, key );
- if ( answer == null ) {
+ public static <K> Boolean getBoolean(Map<? super K, ?> map, K key, Boolean defaultValue) {
+ Boolean answer = getBoolean(map, key);
+ if (answer == null) {
answer = defaultValue;
}
return answer;
@@ -418,9 +426,9 @@ public class MapUtils {
* original value is null, the map is null or the number conversion
* fails
*/
- public static Number getNumber( Map map, Object key, Number defaultValue ) {
- Number answer = getNumber( map, key );
- if ( answer == null ) {
+ public static <K> Number getNumber(Map<? super K, ?> map, K key, Number defaultValue) {
+ Number answer = getNumber(map, key);
+ if (answer == null) {
answer = defaultValue;
}
return answer;
@@ -438,9 +446,9 @@ public class MapUtils {
* original value is null, the map is null or the number conversion
* fails
*/
- public static Byte getByte( Map map, Object key, Byte defaultValue ) {
- Byte answer = getByte( map, key );
- if ( answer == null ) {
+ public static <K> Byte getByte(Map<? super K, ?> map, K key, Byte defaultValue) {
+ Byte answer = getByte(map, key);
+ if (answer == null) {
answer = defaultValue;
}
return answer;
@@ -458,9 +466,9 @@ public class MapUtils {
* original value is null, the map is null or the number conversion
* fails
*/
- public static Short getShort( Map map, Object key, Short defaultValue ) {
- Short answer = getShort( map, key );
- if ( answer == null ) {
+ public static <K> Short getShort(Map<? super K, ?> map, K key, Short defaultValue) {
+ Short answer = getShort(map, key);
+ if (answer == null) {
answer = defaultValue;
}
return answer;
@@ -478,9 +486,9 @@ public class MapUtils {
* original value is null, the map is null or the number conversion
* fails
*/
- public static Integer getInteger( Map map, Object key, Integer defaultValue ) {
- Integer answer = getInteger( map, key );
- if ( answer == null ) {
+ public static <K> Integer getInteger(Map<? super K, ?> map, K key, Integer defaultValue) {
+ Integer answer = getInteger(map, key);
+ if (answer == null) {
answer = defaultValue;
}
return answer;
@@ -498,9 +506,9 @@ public class MapUtils {
* original value is null, the map is null or the number conversion
* fails
*/
- public static Long getLong( Map map, Object key, Long defaultValue ) {
- Long answer = getLong( map, key );
- if ( answer == null ) {
+ public static <K> Long getLong(Map<? super K, ?> map, K key, Long defaultValue) {
+ Long answer = getLong(map, key);
+ if (answer == null) {
answer = defaultValue;
}
return answer;
@@ -518,9 +526,9 @@ public class MapUtils {
* original value is null, the map is null or the number conversion
* fails
*/
- public static Float getFloat( Map map, Object key, Float defaultValue ) {
- Float answer = getFloat( map, key );
- if ( answer == null ) {
+ public static <K> Float getFloat(Map<? super K, ?> map, K key, Float defaultValue) {
+ Float answer = getFloat(map, key);
+ if (answer == null) {
answer = defaultValue;
}
return answer;
@@ -538,9 +546,9 @@ public class MapUtils {
* original value is null, the map is null or the number conversion
* fails
*/
- public static Double getDouble( Map map, Object key, Double defaultValue ) {
- Double answer = getDouble( map, key );
- if ( answer == null ) {
+ public static <K> Double getDouble(Map<? super K, ?> map, K key, Double defaultValue) {
+ Double answer = getDouble(map, key);
+ if (answer == null) {
answer = defaultValue;
}
return answer;
@@ -558,14 +566,13 @@ public class MapUtils {
* original value is null, the map is null or the map conversion
* fails
*/
- public static Map getMap( Map map, Object key, Map defaultValue ) {
- Map answer = getMap( map, key );
- if ( answer == null ) {
+ public static <K> Map<?, ?> getMap(Map<? super K, ?> map, K key, Map<?, ?> defaultValue) {
+ Map<?, ?> answer = getMap(map, key);
+ if (answer == null) {
answer = defaultValue;
}
return answer;
}
-
// Type safe primitive getters
//-------------------------------------------------------------------------
@@ -583,12 +590,8 @@ public class MapUtils {
* @param key the key to look up
* @return the value in the Map as a Boolean, <code>false</code> if null map input
*/
- public static boolean getBooleanValue(final Map map, final Object key) {
- Boolean booleanObject = getBoolean(map, key);
- if (booleanObject == null) {
- return false;
- }
- return booleanObject.booleanValue();
+ public static <K> boolean getBooleanValue(final Map<? super K, ?> map, final K key) {
+ return Boolean.TRUE.equals(getBoolean(map, key));
}
/**
@@ -600,7 +603,7 @@ public class MapUtils {
* @param key the key to look up
* @return the value in the Map as a byte, <code>0</code> if null map input
*/
- public static byte getByteValue(final Map map, final Object key) {
+ public static <K> byte getByteValue(final Map<? super K, ?> map, final K key) {
Byte byteObject = getByte(map, key);
if (byteObject == null) {
return 0;
@@ -617,7 +620,7 @@ public class MapUtils {
* @param key the key to look up
* @return the value in the Map as a short, <code>0</code> if null map input
*/
- public static short getShortValue(final Map map, final Object key) {
+ public static <K> short getShortValue(final Map<? super K, ?> map, final K key) {
Short shortObject = getShort(map, key);
if (shortObject == null) {
return 0;
@@ -634,7 +637,7 @@ public class MapUtils {
* @param key the key to look up
* @return the value in the Map as an int, <code>0</code> if null map input
*/
- public static int getIntValue(final Map map, final Object key) {
+ public static <K> int getIntValue(final Map<? super K, ?> map, final K key) {
Integer integerObject = getInteger(map, key);
if (integerObject == null) {
return 0;
@@ -651,7 +654,7 @@ public class MapUtils {
* @param key the key to look up
* @return the value in the Map as a long, <code>0L</code> if null map input
*/
- public static long getLongValue(final Map map, final Object key) {
+ public static <K> long getLongValue(final Map<? super K, ?> map, final K key) {
Long longObject = getLong(map, key);
if (longObject == null) {
return 0L;
@@ -668,7 +671,7 @@ public class MapUtils {
* @param key the key to look up
* @return the value in the Map as a float, <code>0.0F</code> if null map input
*/
- public static float getFloatValue(final Map map, final Object key) {
+ public static <K> float getFloatValue(final Map<? super K, ?> map, final K key) {
Float floatObject = getFloat(map, key);
if (floatObject == null) {
return 0f;
@@ -685,7 +688,7 @@ public class MapUtils {
* @param key the key to look up
* @return the value in the Map as a double, <code>0.0</code> if null map input
*/
- public static double getDoubleValue(final Map map, final Object key) {
+ public static <K> double getDoubleValue(final Map<? super K, ?> map, final K key) {
Double doubleObject = getDouble(map, key);
if (doubleObject == null) {
return 0d;
@@ -712,7 +715,7 @@ public class MapUtils {
* conversion fails
* @return the value in the Map as a Boolean, <code>defaultValue</code> if null map input
*/
- public static boolean getBooleanValue(final Map map, final Object key, boolean defaultValue) {
+ public static <K> boolean getBooleanValue(final Map<? super K, ?> map, final K key, boolean defaultValue) {
Boolean booleanObject = getBoolean(map, key);
if (booleanObject == null) {
return defaultValue;
@@ -732,7 +735,7 @@ public class MapUtils {
* conversion fails
* @return the value in the Map as a byte, <code>defaultValue</code> if null map input
*/
- public static byte getByteValue(final Map map, final Object key, byte defaultValue) {
+ public static <K> byte getByteValue(final Map<? super K, ?> map, final K key, byte defaultValue) {
Byte byteObject = getByte(map, key);
if (byteObject == null) {
return defaultValue;
@@ -752,7 +755,7 @@ public class MapUtils {
* conversion fails
* @return the value in the Map as a short, <code>defaultValue</code> if null map input
*/
- public static short getShortValue(final Map map, final Object key, short defaultValue) {
+ public static <K> short getShortValue(final Map<? super K, ?> map, final K key, short defaultValue) {
Short shortObject = getShort(map, key);
if (shortObject == null) {
return defaultValue;
@@ -772,7 +775,7 @@ public class MapUtils {
* conversion fails
* @return the value in the Map as an int, <code>defaultValue</code> if null map input
*/
- public static int getIntValue(final Map map, final Object key, int defaultValue) {
+ public static <K> int getIntValue(final Map<? super K, ?> map, final K key, int defaultValue) {
Integer integerObject = getInteger(map, key);
if (integerObject == null) {
return defaultValue;
@@ -792,7 +795,7 @@ public class MapUtils {
* conversion fails
* @return the value in the Map as a long, <code>defaultValue</code> if null map input
*/
- public static long getLongValue(final Map map, final Object key, long defaultValue) {
+ public static <K> long getLongValue(final Map<? super K, ?> map, final K key, long defaultValue) {
Long longObject = getLong(map, key);
if (longObject == null) {
return defaultValue;
@@ -812,7 +815,7 @@ public class MapUtils {
* conversion fails
* @return the value in the Map as a float, <code>defaultValue</code> if null map input
*/
- public static float getFloatValue(final Map map, final Object key, float defaultValue) {
+ public static <K> float getFloatValue(final Map<? super K, ?> map, final K key, float defaultValue) {
Float floatObject = getFloat(map, key);
if (floatObject == null) {
return defaultValue;
@@ -832,7 +835,7 @@ public class MapUtils {
* conversion fails
* @return the value in the Map as a double, <code>defaultValue</code> if null map input
*/
- public static double getDoubleValue(final Map map, final Object key, double defaultValue) {
+ public static <K> double getDoubleValue(final Map<? super K, ?> map, final K key, double defaultValue) {
Double doubleObject = getDouble(map, key);
if (doubleObject == null) {
return defaultValue;
@@ -849,11 +852,11 @@ public class MapUtils {
* @param map the map to convert to a Properties object, may not be null
* @return the properties object
*/
- public static Properties toProperties(final Map map) {
+ public static <K, V> Properties toProperties(final Map<K, V> map) {
Properties answer = new Properties();
if (map != null) {
- for (Iterator iter = map.entrySet().iterator(); iter.hasNext();) {
- Map.Entry entry = (Map.Entry) iter.next();
+ for (Iterator<Map.Entry<K, V>> iter = map.entrySet().iterator(); iter.hasNext();) {
+ Map.Entry<?, ?> entry = iter.next();
Object key = entry.getKey();
Object value = entry.getValue();
answer.put(key, value);
@@ -869,16 +872,16 @@ public class MapUtils {
* @return the hashmap containing the data
* @throws NullPointerException if the bundle is null
*/
- public static Map toMap(final ResourceBundle resourceBundle) {
- Enumeration enumeration = resourceBundle.getKeys();
- Map map = new HashMap();
+ public static Map<String, Object> toMap(final ResourceBundle resourceBundle) {
+ Enumeration<String> enumeration = resourceBundle.getKeys();
+ Map<String, Object> map = new HashMap<String, Object>();
while (enumeration.hasMoreElements()) {
String key = (String) enumeration.nextElement();
Object value = resourceBundle.getObject(key);
map.put(key, value);
}
-
+
return map;
}
@@ -905,9 +908,9 @@ public class MapUtils {
public static void verbosePrint(
final PrintStream out,
final Object label,
- final Map map) {
+ final Map<?, ?> map) {
- verbosePrintInternal(out, label, map, new ArrayStack(), false);
+ verbosePrintInternal(out, label, map, new ArrayStack<Map<?, ?>>(), false);
}
/**
@@ -931,9 +934,9 @@ public class MapUtils {
public static void debugPrint(
final PrintStream out,
final Object label,
- final Map map) {
+ final Map<?, ?> map) {
- verbosePrintInternal(out, label, map, new ArrayStack(), true);
+ verbosePrintInternal(out, label, map, new ArrayStack<Map<?, ?>>(), true);
}
// Implementation methods
@@ -975,8 +978,8 @@ public class MapUtils {
private static void verbosePrintInternal(
final PrintStream out,
final Object label,
- final Map map,
- final ArrayStack lineage,
+ final Map<?, ?> map,
+ final ArrayStack<Map<?, ?>> lineage,
final boolean debug) {
printIndent(out, lineage.size());
@@ -999,15 +1002,14 @@ public class MapUtils {
lineage.push(map);
- for (Iterator it = map.entrySet().iterator(); it.hasNext();) {
- Map.Entry entry = (Map.Entry) it.next();
+ for (Map.Entry<?, ?> entry : map.entrySet()) {
Object childKey = entry.getKey();
Object childValue = entry.getValue();
if (childValue instanceof Map && !lineage.contains(childValue)) {
verbosePrintInternal(
out,
(childKey == null ? "null" : childKey),
- (Map) childValue,
+ (Map<?, ?>) childValue,
lineage,
debug);
} else {
@@ -1026,7 +1028,7 @@ public class MapUtils {
+ (lineage.size() - 1 - lineageIndex - 1)
+ "] Map)");
}
-
+
if (debug && childValue != null) {
out.print(' ');
out.println(childValue.getClass().getName());
@@ -1035,7 +1037,7 @@ public class MapUtils {
}
}
}
-
+
lineage.pop();
printIndent(out, lineage.size());
@@ -1052,7 +1054,7 @@ public class MapUtils {
out.print(INDENT_STRING);
}
}
-
+
// Misc
//-----------------------------------------------------------------------
/**
@@ -1068,15 +1070,15 @@ public class MapUtils {
* @return a new HashMap containing the inverted data
* @throws NullPointerException if the map is null
*/
- public static Map invertMap(Map map) {
- Map out = new HashMap(map.size());
- for (Iterator it = map.entrySet().iterator(); it.hasNext();) {
- Map.Entry entry = (Map.Entry) it.next();
+ public static <K, V> Map<V, K> invertMap(Map<K, V> map) {
+ Map<V, K> out = new HashMap<V, K>(map.size());
+ for (Iterator<Map.Entry<K, V>> it = map.entrySet().iterator(); it.hasNext();) {
+ Map.Entry<K, V> entry = it.next();
out.put(entry.getValue(), entry.getKey());
}
return out;
}
-
+
//-----------------------------------------------------------------------
/**
* Protects against adding null values to a map.
@@ -1089,18 +1091,16 @@ public class MapUtils {
* which should be held in the same way in the map.
* <p>
* Keys are not validated.
+ * Note that this method can be used to circumvent the map's
+ * value type at runtime.
*
* @param map the map to add to, may not be null
* @param key the key
* @param value the value, null converted to ""
* @throws NullPointerException if the map is null
*/
- public static void safeAddToMap(Map map, Object key, Object value) throws NullPointerException {
- if (value == null) {
- map.put(key, "");
- } else {
- map.put(key, value);
- }
+ public static <K> void safeAddToMap(Map<? super K, Object> map, K key, Object value) throws NullPointerException {
+ map.put(key, value == null ? "" : value);
}
//-----------------------------------------------------------------------
@@ -1151,7 +1151,8 @@ public class MapUtils {
* @throws ClassCastException if the array contents is mixed
* @since Commons Collections 3.2
*/
- public static Map putAll(Map map, Object[] array) {
+ @SuppressWarnings("unchecked")
+ public static <K, V> Map<K, V> putAll(Map<K, V> map, Object[] array) {
map.size(); // force NPE
if (array == null || array.length == 0) {
return map;
@@ -1159,12 +1160,12 @@ public class MapUtils {
Object obj = array[0];
if (obj instanceof Map.Entry) {
for (int i = 0; i < array.length; i++) {
- Map.Entry entry = (Map.Entry) array[i];
+ Map.Entry<K, V> entry = (Map.Entry<K, V>) array[i];
map.put(entry.getKey(), entry.getValue());
}
} else if (obj instanceof KeyValue) {
for (int i = 0; i < array.length; i++) {
- KeyValue keyval = (KeyValue) array[i];
+ KeyValue<K, V> keyval = (KeyValue<K, V>) array[i];
map.put(keyval.getKey(), keyval.getValue());
}
} else if (obj instanceof Object[]) {
@@ -1173,11 +1174,11 @@ public class MapUtils {
if (sub == null || sub.length < 2) {
throw new IllegalArgumentException("Invalid array element: " + i);
}
- map.put(sub[0], sub[1]);
+ map.put((K) sub[0], (V) sub[1]);
}
} else {
for (int i = 0; i < array.length - 1;) {
- map.put(array[i++], array[i++]);
+ map.put((K) array[i++], (V) array[i++]);
}
}
return map;
@@ -1193,6 +1194,7 @@ public class MapUtils {
* @return true if empty or null
* @since Commons Collections 3.2
*/
+ @SuppressWarnings("unchecked")
public static boolean isEmpty(Map map) {
return (map == null || map.isEmpty());
}
@@ -1206,6 +1208,7 @@ public class MapUtils {
* @return true if non-null and non-empty
* @since Commons Collections 3.2
*/
+ @SuppressWarnings("unchecked")
public static boolean isNotEmpty(Map map) {
return !MapUtils.isEmpty(map);
}
@@ -1235,7 +1238,7 @@ public class MapUtils {
* @return a synchronized map backed by the given map
* @throws IllegalArgumentException if the map is null
*/
- public static Map synchronizedMap(Map map) {
+ public static <K, V> Map<K, V> synchronizedMap(Map<K, V> map) {
return Collections.synchronizedMap(map);
}
@@ -1248,7 +1251,7 @@ public class MapUtils {
* @return an unmodifiable map backed by the given map
* @throws IllegalArgumentException if the map is null
*/
- public static Map unmodifiableMap(Map map) {
+ public static <K, V> Map<K, V> unmodifiableMap(Map<K, V> map) {
return UnmodifiableMap.decorate(map);
}
@@ -1267,7 +1270,7 @@ public class MapUtils {
* @return a predicated map backed by the given map
* @throws IllegalArgumentException if the Map is null
*/
- public static Map predicatedMap(Map map, Predicate keyPred, Predicate valuePred) {
+ public static <K, V> Map<K, V> predicatedMap(Map<K, V> map, Predicate<? super K> keyPred, Predicate<? super V> valuePred) {
return PredicatedMap.decorate(map, keyPred, valuePred);
}
@@ -1292,7 +1295,9 @@ public class MapUtils {
* @return a transformed map backed by the given map
* @throws IllegalArgumentException if the Map is null
*/
- public static Map transformedMap(Map map, Transformer keyTransformer, Transformer valueTransformer) {
+ public static <K, V> Map<K, V> transformedMap(Map<K, V> map,
+ Transformer<? super K, ? extends K> keyTransformer,
+ Transformer<? super V, ? extends V> valueTransformer) {
return TransformedMap.decorate(map, keyTransformer, valueTransformer);
}
@@ -1306,7 +1311,7 @@ public class MapUtils {
* @return a fixed-size map backed by that map
* @throws IllegalArgumentException if the Map is null
*/
- public static Map fixedSizeMap(Map map) {
+ public static <K, V> Map<K, V> fixedSizeMap(Map<K, V> map) {
return FixedSizeMap.decorate(map);
}
@@ -1338,8 +1343,8 @@ public class MapUtils {
* @return a lazy map backed by the given map
* @throws IllegalArgumentException if the Map or Factory is null
*/
- public static Map lazyMap(Map map, Factory factory) {
- return LazyMap.decorate(map, factory);
+ public static <K, V> Map<K, V> lazyMap(Map<K, V> map, Factory<? extends V> factory) {
+ return LazyMap.getLazyMap(map, factory);
}
/**
@@ -1377,8 +1382,8 @@ public class MapUtils {
* @return a lazy map backed by the given map
* @throws IllegalArgumentException if the Map or Transformer is null
*/
- public static Map lazyMap(Map map, Transformer transformerFactory) {
- return LazyMap.decorate(map, transformerFactory);
+ public static <K, V> Map<K, V> lazyMap(Map<K, V> map, Transformer<? super K, ? extends V> transformerFactory) {
+ return LazyMap.getLazyMap(map, transformerFactory);
}
/**
@@ -1392,7 +1397,7 @@ public class MapUtils {
* @return an ordered map backed by the given map
* @throws IllegalArgumentException if the Map is null
*/
- public static Map orderedMap(Map map) {
+ public static <K, V> Map<K, V> orderedMap(Map<K, V> map) {
return ListOrderedMap.decorate(map);
}
@@ -1405,8 +1410,8 @@ public class MapUtils {
* @see MultiValueMap
* @since Commons Collections 3.2
*/
- public static Map multiValueMap(Map map) {
- return MultiValueMap.decorate(map);
+ public static <K, V> MultiValueMap<K, V> multiValueMap(Map<K, ? super Collection<V>> map) {
+ return MultiValueMap.<K, V>decorate(map);
}
/**
@@ -1420,7 +1425,7 @@ public class MapUtils {
* @see MultiValueMap
* @since Commons Collections 3.2
*/
- public static Map multiValueMap(Map map, Class collectionClass) {
+ public static <K, V, C extends Collection<V>> MultiValueMap<K, V> multiValueMap(Map<K, C> map, Class<C> collectionClass) {
return MultiValueMap.decorate(map, collectionClass);
}
@@ -1435,7 +1440,7 @@ public class MapUtils {
* @see MultiValueMap
* @since Commons Collections 3.2
*/
- public static Map multiValueMap(Map map, Factory collectionFactory) {
+ public static <K, V, C extends Collection<V>> MultiValueMap<K, V> multiValueMap(Map<K, C> map, Factory<C> collectionFactory) {
return MultiValueMap.decorate(map, collectionFactory);
}
@@ -1464,7 +1469,7 @@ public class MapUtils {
* @return a synchronized map backed by the given map
* @throws IllegalArgumentException if the map is null
*/
- public static Map synchronizedSortedMap(SortedMap map) {
+ public static <K, V> SortedMap<K, V> synchronizedSortedMap(SortedMap<K, V> map) {
return Collections.synchronizedSortedMap(map);
}
@@ -1477,7 +1482,7 @@ public class MapUtils {
* @return an unmodifiable map backed by the given map
* @throws IllegalArgumentException if the map is null
*/
- public static Map unmodifiableSortedMap(SortedMap map) {
+ public static <K, V> SortedMap<K, V> unmodifiableSortedMap(SortedMap<K, V> map) {
return UnmodifiableSortedMap.decorate(map);
}
@@ -1496,7 +1501,8 @@ public class MapUtils {
* @return a predicated map backed by the given map
* @throws IllegalArgumentException if the SortedMap is null
*/
- public static SortedMap predicatedSortedMap(SortedMap map, Predicate keyPred, Predicate valuePred) {
+ public static <K, V> SortedMap<K, V> predicatedSortedMap(SortedMap<K, V> map,
+ Predicate<? super K> keyPred, Predicate<? super V> valuePred) {
return PredicatedSortedMap.decorate(map, keyPred, valuePred);
}
@@ -1521,7 +1527,9 @@ public class MapUtils {
* @return a transformed map backed by the given map
* @throws IllegalArgumentException if the SortedMap is null
*/
- public static SortedMap transformedSortedMap(SortedMap map, Transformer keyTransformer, Transformer valueTransformer) {
+ public static <K, V> SortedMap<K, V> transformedSortedMap(SortedMap<K, V> map,
+ Transformer<? super K, ? extends K> keyTransformer,
+ Transformer<? super V, ? extends V> valueTransformer) {
return TransformedSortedMap.decorate(map, keyTransformer, valueTransformer);
}
@@ -1535,7 +1543,7 @@ public class MapUtils {
* @return a fixed-size map backed by that map
* @throws IllegalArgumentException if the SortedMap is null
*/
- public static SortedMap fixedSizeSortedMap(SortedMap map) {
+ public static <K, V> SortedMap<K, V> fixedSizeSortedMap(SortedMap<K, V> map) {
return FixedSizeSortedMap.decorate(map);
}
@@ -1568,8 +1576,9 @@ public class MapUtils {
* @return a lazy map backed by the given map
* @throws IllegalArgumentException if the SortedMap or Factory is null
*/
- public static SortedMap lazySortedMap(SortedMap map, Factory factory) {
- return LazySortedMap.decorate(map, factory);
+ public static <K, V> SortedMap<K, V> lazySortedMap(SortedMap<K, V> map,
+ Factory<? extends V> factory) {
+ return LazySortedMap.getLazySortedMap(map, factory);
}
/**
@@ -1607,8 +1616,9 @@ public class MapUtils {
* @return a lazy map backed by the given map
* @throws IllegalArgumentException if the Map or Transformer is null
*/
- public static SortedMap lazySortedMap(SortedMap map, Transformer transformerFactory) {
- return LazySortedMap.decorate(map, transformerFactory);
+ public static <K, V> SortedMap<K, V> lazySortedMap(SortedMap<K, V> map,
+ Transformer<? super K, ? extends V> transformerFactory) {
+ return LazySortedMap.getLazySortedMap(map, transformerFactory);
}
}
http://git-wip-us.apache.org/repos/asf/commons-collections/blob/884baf0d/src/java/org/apache/commons/collections/MultiMap.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/commons/collections/MultiMap.java b/src/java/org/apache/commons/collections/MultiMap.java
index fa2d727..388b56a 100644
--- a/src/java/org/apache/commons/collections/MultiMap.java
+++ b/src/java/org/apache/commons/collections/MultiMap.java
@@ -47,7 +47,7 @@ import java.util.Map;
* @author James Strachan
* @author Stephen Colebourne
*/
-public interface MultiMap extends Map {
+public interface MultiMap<K, V> extends Map<K, Object> {
/**
* Removes a specific value from map.
@@ -66,7 +66,7 @@ public interface MultiMap extends Map {
* @throws ClassCastException if the key or value is of an invalid type
* @throws NullPointerException if the key or value is null and null is invalid
*/
- public Object remove(Object key, Object item);
+ public V remove(K key, V item);
//-----------------------------------------------------------------------
/**
@@ -98,7 +98,7 @@ public interface MultiMap extends Map {
* @throws ClassCastException if the key is of an invalid type
* @throws NullPointerException if the key is null and null keys are invalid
*/
- Object get(Object key);
+ Object get(K key);
/**
* Checks whether the map contains the value specified.
@@ -129,7 +129,7 @@ public interface MultiMap extends Map {
* @throws NullPointerException if the key or value is null and null is invalid
* @throws IllegalArgumentException if the key or value is invalid
*/
- Object put(Object key, Object value);
+ Object put(K key, Object value);
/**
* Removes all values associated with the specified key.
@@ -144,7 +144,7 @@ public interface MultiMap extends Map {
* @throws ClassCastException if the key is of an invalid type
* @throws NullPointerException if the key is null and null keys are invalid
*/
- Object remove(Object key);
+ Object remove(K key);
/**
* Gets a collection containing all the values in the map.
@@ -155,6 +155,6 @@ public interface MultiMap extends Map {
*
* @return a collection view of the values contained in this map
*/
- Collection values();
+ Collection<Object> values();
}
http://git-wip-us.apache.org/repos/asf/commons-collections/blob/884baf0d/src/java/org/apache/commons/collections/OrderedBidiMap.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/commons/collections/OrderedBidiMap.java b/src/java/org/apache/commons/collections/OrderedBidiMap.java
index 70f6ca2..642d9df 100644
--- a/src/java/org/apache/commons/collections/OrderedBidiMap.java
+++ b/src/java/org/apache/commons/collections/OrderedBidiMap.java
@@ -47,20 +47,6 @@ public interface OrderedBidiMap<K, V> extends BidiMap<K, V>, OrderedMap<K, V> {
*
* @return an inverted bidirectional map
*/
- public BidiMap<V, K> inverseBidiMap();
-
- /**
- * Gets a view of this map where the keys and values are reversed.
- * <p>
- * Changes to one map will be visible in the other and vice versa.
- * This enables both directions of the map to be accessed equally.
- * <p>
- * Implementations should seek to avoid creating a new object every time this
- * method is called. See <code>AbstractMap.values()</code> etc. Calling this
- * method on the inverse map should return the original.
- *
- * @return an inverted bidirectional map
- */
- public OrderedBidiMap<V, K> inverseOrderedBidiMap();
+ public OrderedBidiMap<V, K> inverseBidiMap();
}
http://git-wip-us.apache.org/repos/asf/commons-collections/blob/884baf0d/src/java/org/apache/commons/collections/OrderedMap.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/commons/collections/OrderedMap.java b/src/java/org/apache/commons/collections/OrderedMap.java
index 83e34cd..7a45392 100644
--- a/src/java/org/apache/commons/collections/OrderedMap.java
+++ b/src/java/org/apache/commons/collections/OrderedMap.java
@@ -37,7 +37,7 @@ public interface OrderedMap<K, V> extends IterableMap<K, V> {
*
* @return a map iterator
*/
- OrderedMapIterator<K, V> orderedMapIterator();
+ OrderedMapIterator<K, V> mapIterator();
/**
* Gets the first key currently in this map.