mirror of
https://github.com/apache/commons-collections.git
synced 2025-02-09 19:45:42 +00:00
[COLLECTIONS-485] Added wildcards to copy-constructors and unmodifiable decorators / iterators, thanks to Hollis Waite.
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/collections/trunk@1533984 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
ba1e716261
commit
4fca8268a9
@ -22,6 +22,10 @@
|
||||
<body>
|
||||
|
||||
<release version="4.0" date="TBA" description="Next release">
|
||||
<action issue="COLLECTIONS-485" dev="tn" type="fix" due-to="Hollis Waite">
|
||||
Accept wildcard input where possible, e.g. in copy-constructors, Unmodifiable* decorators
|
||||
and iterators.
|
||||
</action>
|
||||
<action issue="COLLECTIONS-481" dev="tn" type="fix" due-to="Hollis Waite">
|
||||
No collision detection/resolution was performed when calling "CompositeSet#addComposited(...)"
|
||||
with more than one Set as argument. Additionally use varargs parameters instead of arrays
|
||||
|
@ -92,7 +92,7 @@ public class BagUtils {
|
||||
* @return an unmodifiable view of that bag
|
||||
* @throws IllegalArgumentException if the Bag is null
|
||||
*/
|
||||
public static <E> Bag<E> unmodifiableBag(final Bag<E> bag) {
|
||||
public static <E> Bag<E> unmodifiableBag(final Bag<? extends E> bag) {
|
||||
return UnmodifiableBag.unmodifiableBag(bag);
|
||||
}
|
||||
|
||||
|
@ -1701,7 +1701,7 @@ public class CollectionUtils {
|
||||
* @return an unmodifiable collection backed by the given collection
|
||||
* @throws IllegalArgumentException if the collection is null
|
||||
*/
|
||||
public static <C> Collection<C> unmodifiableCollection(final Collection<C> collection) {
|
||||
public static <C> Collection<C> unmodifiableCollection(final Collection<? extends C> collection) {
|
||||
return UnmodifiableCollection.unmodifiableCollection(collection);
|
||||
}
|
||||
|
||||
|
@ -47,7 +47,7 @@ public class EnumerationUtils {
|
||||
* @return a list containing all elements of the given enumeration
|
||||
* @throws NullPointerException if the enumeration parameter is <code>null</code>.
|
||||
*/
|
||||
public static <E> List<E> toList(final Enumeration<E> enumeration) {
|
||||
public static <E> List<E> toList(final Enumeration<? extends E> enumeration) {
|
||||
return IteratorUtils.toList(new EnumerationIterator<E>(enumeration));
|
||||
}
|
||||
|
||||
|
@ -398,7 +398,7 @@ public class ListUtils {
|
||||
* @return an unmodifiable list backed by the given list
|
||||
* @throws IllegalArgumentException if the list is null
|
||||
*/
|
||||
public static <E> List<E> unmodifiableList(final List<E> list) {
|
||||
public static <E> List<E> unmodifiableList(final List<? extends E> list) {
|
||||
return UnmodifiableList.unmodifiableList(list);
|
||||
}
|
||||
|
||||
|
@ -1258,7 +1258,7 @@ public class MapUtils {
|
||||
* @return an unmodifiable map backed by the given map
|
||||
* @throws IllegalArgumentException if the map is null
|
||||
*/
|
||||
public static <K, V> Map<K, V> unmodifiableMap(final Map<K, V> map) {
|
||||
public static <K, V> Map<K, V> unmodifiableMap(final Map<? extends K, ? extends V> map) {
|
||||
return UnmodifiableMap.unmodifiableMap(map);
|
||||
}
|
||||
|
||||
@ -1517,7 +1517,7 @@ public class MapUtils {
|
||||
* @return an unmodifiable map backed by the given map
|
||||
* @throws IllegalArgumentException if the map is null
|
||||
*/
|
||||
public static <K, V> SortedMap<K, V> unmodifiableSortedMap(final SortedMap<K, V> map) {
|
||||
public static <K, V> SortedMap<K, V> unmodifiableSortedMap(final SortedMap<K, ? extends V> map) {
|
||||
return UnmodifiableSortedMap.unmodifiableSortedMap(map);
|
||||
}
|
||||
|
||||
|
@ -51,7 +51,7 @@ public class QueueUtils {
|
||||
* @return an unmodifiable queue backed by that queue
|
||||
* @throws IllegalArgumentException if the Queue is null
|
||||
*/
|
||||
public static <E> Queue<E> unmodifiableQueue(final Queue<E> queue) {
|
||||
public static <E> Queue<E> unmodifiableQueue(final Queue<? extends E> queue) {
|
||||
return UnmodifiableQueue.unmodifiableQueue(queue);
|
||||
}
|
||||
|
||||
|
@ -188,7 +188,7 @@ public class SetUtils {
|
||||
* @return an unmodifiable set backed by the given set
|
||||
* @throws IllegalArgumentException if the set is null
|
||||
*/
|
||||
public static <E> Set<E> unmodifiableSet(final Set<E> set) {
|
||||
public static <E> Set<E> unmodifiableSet(final Set<? extends E> set) {
|
||||
return UnmodifiableSet.unmodifiableSet(set);
|
||||
}
|
||||
|
||||
|
@ -41,7 +41,7 @@ public class TrieUtils {
|
||||
*
|
||||
* @see java.util.Collections#unmodifiableMap(java.util.Map)
|
||||
*/
|
||||
public static <K, V> Trie<K, V> unmodifiableTrie(final Trie<K, V> trie) {
|
||||
public static <K, V> Trie<K, V> unmodifiableTrie(final Trie<K, ? extends V> trie) {
|
||||
return UnmodifiableTrie.unmodifiableTrie(trie);
|
||||
}
|
||||
|
||||
|
@ -56,9 +56,11 @@ public final class UnmodifiableBag<E>
|
||||
* @throws IllegalArgumentException if bag is null
|
||||
* @since 4.0
|
||||
*/
|
||||
public static <E> Bag<E> unmodifiableBag(final Bag<E> bag) {
|
||||
public static <E> Bag<E> unmodifiableBag(final Bag<? extends E> bag) {
|
||||
if (bag instanceof Unmodifiable) {
|
||||
return bag;
|
||||
@SuppressWarnings("unchecked") // safe to upcast
|
||||
final Bag<E> tmpBag = (Bag<E>) bag;
|
||||
return tmpBag;
|
||||
}
|
||||
return new UnmodifiableBag<E>(bag);
|
||||
}
|
||||
@ -70,8 +72,9 @@ public final class UnmodifiableBag<E>
|
||||
* @param bag the bag to decorate, must not be null
|
||||
* @throws IllegalArgumentException if bag is null
|
||||
*/
|
||||
private UnmodifiableBag(final Bag<E> bag) {
|
||||
super(bag);
|
||||
@SuppressWarnings("unchecked") // safe to upcast
|
||||
private UnmodifiableBag(final Bag<? extends E> bag) {
|
||||
super((Bag<E>) bag);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
@ -57,7 +57,7 @@ public class DualHashBidiMap<K, V> extends AbstractDualBidiMap<K, V> implements
|
||||
*
|
||||
* @param map the map whose mappings are to be placed in this map
|
||||
*/
|
||||
public DualHashBidiMap(final Map<K, V> map) {
|
||||
public DualHashBidiMap(final Map<? extends K, ? extends V> map) {
|
||||
super(new HashMap<K, V>(), new HashMap<V, K>());
|
||||
putAll(map);
|
||||
}
|
||||
|
@ -16,8 +16,6 @@
|
||||
*/
|
||||
package org.apache.commons.collections4.bidimap;
|
||||
|
||||
import org.apache.commons.collections4.BidiMap;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.ObjectInputStream;
|
||||
import java.io.ObjectOutputStream;
|
||||
@ -25,6 +23,8 @@ import java.io.Serializable;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.collections4.BidiMap;
|
||||
|
||||
/**
|
||||
* Implementation of <code>BidiMap</code> that uses two <code>LinkedHashMap</code> instances.
|
||||
* <p>
|
||||
@ -52,7 +52,7 @@ public class DualLinkedHashBidiMap<K, V> extends AbstractDualBidiMap<K, V> imple
|
||||
*
|
||||
* @param map the map whose mappings are to be placed in this map
|
||||
*/
|
||||
public DualLinkedHashBidiMap(final Map<K, V> map) {
|
||||
public DualLinkedHashBidiMap(final Map<? extends K, ? extends V> map) {
|
||||
super(new LinkedHashMap<K, V>(), new LinkedHashMap<V, K>());
|
||||
putAll(map);
|
||||
}
|
||||
|
@ -79,7 +79,7 @@ public class DualTreeBidiMap<K, V> extends AbstractDualBidiMap<K, V>
|
||||
*
|
||||
* @param map the map whose mappings are to be placed in this map
|
||||
*/
|
||||
public DualTreeBidiMap(final Map<K, V> map) {
|
||||
public DualTreeBidiMap(final Map<? extends K, ? extends V> map) {
|
||||
super(new TreeMap<K, V>(), new TreeMap<V, K>());
|
||||
putAll(map);
|
||||
this.comparator = null;
|
||||
|
@ -126,7 +126,7 @@ public class TreeBidiMap<K extends Comparable<K>, V extends Comparable<V>>
|
||||
* not Comparable or are not mutually comparable
|
||||
* @throws NullPointerException if any key or value in the map is null
|
||||
*/
|
||||
public TreeBidiMap(final Map<K, V> map) {
|
||||
public TreeBidiMap(final Map<? extends K, ? extends V> map) {
|
||||
this();
|
||||
putAll(map);
|
||||
}
|
||||
|
@ -52,9 +52,11 @@ public final class UnmodifiableBidiMap<K, V>
|
||||
* @throws IllegalArgumentException if map is null
|
||||
* @since 4.0
|
||||
*/
|
||||
public static <K, V> BidiMap<K, V> unmodifiableBidiMap(final BidiMap<K, V> map) {
|
||||
public static <K, V> BidiMap<K, V> unmodifiableBidiMap(final BidiMap<? extends K, ? extends V> map) {
|
||||
if (map instanceof Unmodifiable) {
|
||||
return map;
|
||||
@SuppressWarnings("unchecked") // safe to upcast
|
||||
final BidiMap<K, V> tmpMap = (BidiMap<K, V>) map;
|
||||
return tmpMap;
|
||||
}
|
||||
return new UnmodifiableBidiMap<K, V>(map);
|
||||
}
|
||||
@ -66,8 +68,9 @@ public final class UnmodifiableBidiMap<K, V>
|
||||
* @param map the map to decorate, must not be null
|
||||
* @throws IllegalArgumentException if map is null
|
||||
*/
|
||||
private UnmodifiableBidiMap(final BidiMap<K, V> map) {
|
||||
super(map);
|
||||
@SuppressWarnings("unchecked") // safe to upcast
|
||||
private UnmodifiableBidiMap(final BidiMap<? extends K, ? extends V> map) {
|
||||
super((BidiMap<K, V>) map);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
@ -52,9 +52,12 @@ public final class UnmodifiableOrderedBidiMap<K, V>
|
||||
* @throws IllegalArgumentException if map is null
|
||||
* @since 4.0
|
||||
*/
|
||||
public static <K, V> OrderedBidiMap<K, V> unmodifiableOrderedBidiMap(final OrderedBidiMap<K, V> map) {
|
||||
public static <K, V> OrderedBidiMap<K, V> unmodifiableOrderedBidiMap(
|
||||
final OrderedBidiMap<? extends K, ? extends V> map) {
|
||||
if (map instanceof Unmodifiable) {
|
||||
return map;
|
||||
@SuppressWarnings("unchecked") // safe to upcast
|
||||
final OrderedBidiMap<K, V> tmpMap = (OrderedBidiMap<K, V>) map;
|
||||
return tmpMap;
|
||||
}
|
||||
return new UnmodifiableOrderedBidiMap<K, V>(map);
|
||||
}
|
||||
@ -66,8 +69,9 @@ public final class UnmodifiableOrderedBidiMap<K, V>
|
||||
* @param map the map to decorate, must not be null
|
||||
* @throws IllegalArgumentException if map is null
|
||||
*/
|
||||
private UnmodifiableOrderedBidiMap(final OrderedBidiMap<K, V> map) {
|
||||
super(map);
|
||||
@SuppressWarnings("unchecked") // safe to upcast
|
||||
private UnmodifiableOrderedBidiMap(final OrderedBidiMap<? extends K, ? extends V> map) {
|
||||
super((OrderedBidiMap<K, V>) map);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
@ -54,9 +54,11 @@ public final class UnmodifiableSortedBidiMap<K, V>
|
||||
* @throws IllegalArgumentException if map is null
|
||||
* @since 4.0
|
||||
*/
|
||||
public static <K, V> SortedBidiMap<K, V> unmodifiableSortedBidiMap(final SortedBidiMap<K, V> map) {
|
||||
public static <K, V> SortedBidiMap<K, V> unmodifiableSortedBidiMap(final SortedBidiMap<K, ? extends V> map) {
|
||||
if (map instanceof Unmodifiable) {
|
||||
return map;
|
||||
@SuppressWarnings("unchecked") // safe to upcast
|
||||
final SortedBidiMap<K, V> tmpMap = (SortedBidiMap<K, V>) map;
|
||||
return tmpMap;
|
||||
}
|
||||
return new UnmodifiableSortedBidiMap<K, V>(map);
|
||||
}
|
||||
@ -68,8 +70,9 @@ public final class UnmodifiableSortedBidiMap<K, V>
|
||||
* @param map the map to decorate, must not be null
|
||||
* @throws IllegalArgumentException if map is null
|
||||
*/
|
||||
private UnmodifiableSortedBidiMap(final SortedBidiMap<K, V> map) {
|
||||
super(map);
|
||||
@SuppressWarnings("unchecked") // safe to upcast
|
||||
private UnmodifiableSortedBidiMap(final SortedBidiMap<K, ? extends V> map) {
|
||||
super((SortedBidiMap<K, V>) map);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
@ -54,7 +54,7 @@ public final class UnmodifiableBoundedCollection<E> extends AbstractCollectionDe
|
||||
* @throws IllegalArgumentException if {@code coll} is {@code null}
|
||||
* @since 4.0
|
||||
*/
|
||||
public static <E> BoundedCollection<E> unmodifiableBoundedCollection(final BoundedCollection<E> coll) {
|
||||
public static <E> BoundedCollection<E> unmodifiableBoundedCollection(final BoundedCollection<? extends E> coll) {
|
||||
return new UnmodifiableBoundedCollection<E>(coll);
|
||||
}
|
||||
|
||||
@ -100,8 +100,9 @@ public final class UnmodifiableBoundedCollection<E> extends AbstractCollectionDe
|
||||
* @param coll the collection to decorate, must not be null
|
||||
* @throws IllegalArgumentException if coll is null
|
||||
*/
|
||||
private UnmodifiableBoundedCollection(final BoundedCollection<E> coll) {
|
||||
super(coll);
|
||||
@SuppressWarnings("unchecked") // safe to upcast
|
||||
private UnmodifiableBoundedCollection(final BoundedCollection<? extends E> coll) {
|
||||
super((BoundedCollection<E>) coll);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
@ -51,9 +51,11 @@ public final class UnmodifiableCollection<E>
|
||||
* @throws IllegalArgumentException if collection is null
|
||||
* @since 4.0
|
||||
*/
|
||||
public static <T> Collection<T> unmodifiableCollection(final Collection<T> coll) {
|
||||
public static <T> Collection<T> unmodifiableCollection(final Collection<? extends T> coll) {
|
||||
if (coll instanceof Unmodifiable) {
|
||||
return coll;
|
||||
@SuppressWarnings("unchecked") // safe to upcast
|
||||
final Collection<T> tmpColl = (Collection<T>) coll;
|
||||
return tmpColl;
|
||||
}
|
||||
return new UnmodifiableCollection<T>(coll);
|
||||
}
|
||||
@ -65,8 +67,9 @@ public final class UnmodifiableCollection<E>
|
||||
* @param coll the collection to decorate, must not be null
|
||||
* @throws IllegalArgumentException if collection is null
|
||||
*/
|
||||
private UnmodifiableCollection(final Collection<E> coll) {
|
||||
super(coll);
|
||||
@SuppressWarnings("unchecked") // safe to upcast
|
||||
private UnmodifiableCollection(final Collection<? extends E> coll) {
|
||||
super((Collection<E>) coll);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
@ -273,7 +273,7 @@ public class ComparatorChain<E> implements Comparator<E>, Serializable {
|
||||
final Iterator<Comparator<E>> comparators = comparatorChain.iterator();
|
||||
for (int comparatorIndex = 0; comparators.hasNext(); ++comparatorIndex) {
|
||||
|
||||
final Comparator<E> comparator = comparators.next();
|
||||
final Comparator<? super E> comparator = comparators.next();
|
||||
int retval = comparator.compare(o1,o2);
|
||||
if (retval != 0) {
|
||||
// invert the order if it is a reverse sort
|
||||
|
@ -36,7 +36,7 @@ public class NullComparator<E> implements Comparator<E>, Serializable {
|
||||
/**
|
||||
* The comparator to use when comparing two non-<code>null</code> objects.
|
||||
**/
|
||||
private final Comparator<E> nonNullComparator;
|
||||
private final Comparator<? super E> nonNullComparator;
|
||||
|
||||
/**
|
||||
* Specifies whether a <code>null</code> are compared as higher than
|
||||
@ -69,7 +69,7 @@ public class NullComparator<E> implements Comparator<E>, Serializable {
|
||||
* @exception NullPointerException if <code>nonNullComparator</code> is
|
||||
* <code>null</code>
|
||||
**/
|
||||
public NullComparator(final Comparator<E> nonNullComparator) {
|
||||
public NullComparator(final Comparator<? super E> nonNullComparator) {
|
||||
this(nonNullComparator, true);
|
||||
}
|
||||
|
||||
@ -109,7 +109,7 @@ public class NullComparator<E> implements Comparator<E>, Serializable {
|
||||
* @exception NullPointerException if <code>nonNullComparator</code> is
|
||||
* <code>null</code>
|
||||
**/
|
||||
public NullComparator(final Comparator<E> nonNullComparator, final boolean nullsAreHigh) {
|
||||
public NullComparator(final Comparator<? super E> nonNullComparator, final boolean nullsAreHigh) {
|
||||
this.nonNullComparator = nonNullComparator;
|
||||
this.nullsAreHigh = nullsAreHigh;
|
||||
|
||||
|
@ -60,7 +60,7 @@ public class ReverseComparator<E> implements Comparator<E>, Serializable {
|
||||
* @param comparator Comparator to reverse
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public ReverseComparator(final Comparator<E> comparator) {
|
||||
public ReverseComparator(final Comparator<? super E> comparator) {
|
||||
this.comparator = comparator == null ? ComparatorUtils.NATURAL_COMPARATOR : comparator;
|
||||
}
|
||||
|
||||
|
@ -73,7 +73,7 @@ public class PermutationIterator<E> implements Iterator<List<E>> {
|
||||
* @param coll the collection to generate permutations for
|
||||
* @throws NullPointerException if coll is null
|
||||
*/
|
||||
public PermutationIterator(final Collection<E> coll) {
|
||||
public PermutationIterator(final Collection<? extends E> coll) {
|
||||
if (coll == null) {
|
||||
throw new NullPointerException("The collection must not be null");
|
||||
}
|
||||
|
@ -31,7 +31,7 @@ import org.apache.commons.collections4.Unmodifiable;
|
||||
public final class UnmodifiableIterator<E> implements Iterator<E>, Unmodifiable {
|
||||
|
||||
/** The iterator being decorated */
|
||||
private final Iterator<E> iterator;
|
||||
private final Iterator<? extends E> iterator;
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
/**
|
||||
@ -44,12 +44,14 @@ public final class UnmodifiableIterator<E> implements Iterator<E>, Unmodifiable
|
||||
* @return a new unmodifiable iterator
|
||||
* @throws IllegalArgumentException if the iterator is null
|
||||
*/
|
||||
public static <E> Iterator<E> unmodifiableIterator(final Iterator<E> iterator) {
|
||||
public static <E> Iterator<E> unmodifiableIterator(final Iterator<? extends E> iterator) {
|
||||
if (iterator == null) {
|
||||
throw new IllegalArgumentException("Iterator must not be null");
|
||||
}
|
||||
if (iterator instanceof Unmodifiable) {
|
||||
return iterator;
|
||||
@SuppressWarnings("unchecked") // safe to upcast
|
||||
final Iterator<E> tmpIterator = (Iterator<E>) iterator;
|
||||
return tmpIterator;
|
||||
}
|
||||
return new UnmodifiableIterator<E>(iterator);
|
||||
}
|
||||
@ -60,7 +62,7 @@ public final class UnmodifiableIterator<E> implements Iterator<E>, Unmodifiable
|
||||
*
|
||||
* @param iterator the iterator to decorate
|
||||
*/
|
||||
private UnmodifiableIterator(final Iterator<E> iterator) {
|
||||
private UnmodifiableIterator(final Iterator<? extends E> iterator) {
|
||||
super();
|
||||
this.iterator = iterator;
|
||||
}
|
||||
|
@ -31,7 +31,7 @@ import org.apache.commons.collections4.Unmodifiable;
|
||||
public final class UnmodifiableListIterator<E> implements ListIterator<E>, Unmodifiable {
|
||||
|
||||
/** The iterator being decorated */
|
||||
private final ListIterator<E> iterator;
|
||||
private final ListIterator<? extends E> iterator;
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
/**
|
||||
@ -42,12 +42,14 @@ public final class UnmodifiableListIterator<E> implements ListIterator<E>, Unmod
|
||||
* @return a new unmodifiable list iterator
|
||||
* @throws IllegalArgumentException if the iterator is null
|
||||
*/
|
||||
public static <E> ListIterator<E> umodifiableListIterator(final ListIterator<E> iterator) {
|
||||
public static <E> ListIterator<E> umodifiableListIterator(final ListIterator<? extends E> iterator) {
|
||||
if (iterator == null) {
|
||||
throw new IllegalArgumentException("ListIterator must not be null");
|
||||
}
|
||||
if (iterator instanceof Unmodifiable) {
|
||||
return iterator;
|
||||
@SuppressWarnings("unchecked") // safe to upcast
|
||||
final ListIterator<E> tmpIterator = (ListIterator<E>) iterator;
|
||||
return tmpIterator;
|
||||
}
|
||||
return new UnmodifiableListIterator<E>(iterator);
|
||||
}
|
||||
@ -58,7 +60,7 @@ public final class UnmodifiableListIterator<E> implements ListIterator<E>, Unmod
|
||||
*
|
||||
* @param iterator the iterator to decorate
|
||||
*/
|
||||
private UnmodifiableListIterator(final ListIterator<E> iterator) {
|
||||
private UnmodifiableListIterator(final ListIterator<? extends E> iterator) {
|
||||
super();
|
||||
this.iterator = iterator;
|
||||
}
|
||||
|
@ -30,7 +30,7 @@ import org.apache.commons.collections4.Unmodifiable;
|
||||
public final class UnmodifiableMapIterator<K, V> implements MapIterator<K, V>, Unmodifiable {
|
||||
|
||||
/** The iterator being decorated */
|
||||
private final MapIterator<K, V> iterator;
|
||||
private final MapIterator<? extends K, ? extends V> iterator;
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
/**
|
||||
@ -42,12 +42,15 @@ public final class UnmodifiableMapIterator<K, V> implements MapIterator<K, V>, U
|
||||
* @return a new unmodifiable map iterator
|
||||
* @throws IllegalArgumentException if the iterator is null
|
||||
*/
|
||||
public static <K, V> MapIterator<K, V> unmodifiableMapIterator(final MapIterator<K, V> iterator) {
|
||||
public static <K, V> MapIterator<K, V> unmodifiableMapIterator(
|
||||
final MapIterator<? extends K, ? extends V> iterator) {
|
||||
if (iterator == null) {
|
||||
throw new IllegalArgumentException("MapIterator must not be null");
|
||||
}
|
||||
if (iterator instanceof Unmodifiable) {
|
||||
return iterator;
|
||||
@SuppressWarnings("unchecked") // safe to upcast
|
||||
final MapIterator<K, V> tmpIterator = (MapIterator<K, V>) iterator;
|
||||
return tmpIterator;
|
||||
}
|
||||
return new UnmodifiableMapIterator<K, V>(iterator);
|
||||
}
|
||||
@ -58,7 +61,7 @@ public final class UnmodifiableMapIterator<K, V> implements MapIterator<K, V>, U
|
||||
*
|
||||
* @param iterator the iterator to decorate
|
||||
*/
|
||||
private UnmodifiableMapIterator(final MapIterator<K, V> iterator) {
|
||||
private UnmodifiableMapIterator(final MapIterator<? extends K, ? extends V> iterator) {
|
||||
super();
|
||||
this.iterator = iterator;
|
||||
}
|
||||
|
@ -31,7 +31,7 @@ public final class UnmodifiableOrderedMapIterator<K, V> implements OrderedMapIte
|
||||
Unmodifiable {
|
||||
|
||||
/** The iterator being decorated */
|
||||
private final OrderedMapIterator<K, V> iterator;
|
||||
private final OrderedMapIterator<? extends K, ? extends V> iterator;
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
/**
|
||||
@ -44,13 +44,15 @@ public final class UnmodifiableOrderedMapIterator<K, V> implements OrderedMapIte
|
||||
* @throws IllegalArgumentException if the iterator is null
|
||||
*/
|
||||
public static <K, V> OrderedMapIterator<K, V> unmodifiableOrderedMapIterator(
|
||||
final OrderedMapIterator<K, V> iterator) {
|
||||
final OrderedMapIterator<K, ? extends V> iterator) {
|
||||
|
||||
if (iterator == null) {
|
||||
throw new IllegalArgumentException("OrderedMapIterator must not be null");
|
||||
}
|
||||
if (iterator instanceof Unmodifiable) {
|
||||
return iterator;
|
||||
@SuppressWarnings("unchecked") // safe to upcast
|
||||
final OrderedMapIterator<K, V> tmpIterator = (OrderedMapIterator<K, V>) iterator;
|
||||
return tmpIterator;
|
||||
}
|
||||
return new UnmodifiableOrderedMapIterator<K, V>(iterator);
|
||||
}
|
||||
@ -61,7 +63,7 @@ public final class UnmodifiableOrderedMapIterator<K, V> implements OrderedMapIte
|
||||
*
|
||||
* @param iterator the iterator to decorate
|
||||
*/
|
||||
private UnmodifiableOrderedMapIterator(final OrderedMapIterator<K, V> iterator) {
|
||||
private UnmodifiableOrderedMapIterator(final OrderedMapIterator<K, ? extends V> iterator) {
|
||||
super();
|
||||
this.iterator = iterator;
|
||||
}
|
||||
|
@ -55,7 +55,7 @@ public class DefaultKeyValue<K, V> extends AbstractKeyValue<K, V> {
|
||||
* @param pair the pair to copy, must not be null
|
||||
* @throws NullPointerException if the entry is null
|
||||
*/
|
||||
public DefaultKeyValue(final KeyValue<K, V> pair) {
|
||||
public DefaultKeyValue(final KeyValue<? extends K, ? extends V> pair) {
|
||||
super(pair.getKey(), pair.getValue());
|
||||
}
|
||||
|
||||
@ -65,7 +65,7 @@ public class DefaultKeyValue<K, V> extends AbstractKeyValue<K, V> {
|
||||
* @param entry the entry to copy, must not be null
|
||||
* @throws NullPointerException if the entry is null
|
||||
*/
|
||||
public DefaultKeyValue(final Map.Entry<K, V> entry) {
|
||||
public DefaultKeyValue(final Map.Entry<? extends K, ? extends V> entry) {
|
||||
super(entry.getKey(), entry.getValue());
|
||||
}
|
||||
|
||||
|
@ -45,7 +45,7 @@ public final class DefaultMapEntry<K, V> extends AbstractMapEntry<K, V> {
|
||||
* @param pair the pair to copy, must not be null
|
||||
* @throws NullPointerException if the entry is null
|
||||
*/
|
||||
public DefaultMapEntry(final KeyValue<K, V> pair) {
|
||||
public DefaultMapEntry(final KeyValue<? extends K, ? extends V> pair) {
|
||||
super(pair.getKey(), pair.getValue());
|
||||
}
|
||||
|
||||
@ -55,7 +55,7 @@ public final class DefaultMapEntry<K, V> extends AbstractMapEntry<K, V> {
|
||||
* @param entry the entry to copy, must not be null
|
||||
* @throws NullPointerException if the entry is null
|
||||
*/
|
||||
public DefaultMapEntry(final Map.Entry<K, V> entry) {
|
||||
public DefaultMapEntry(final Map.Entry<? extends K, ? extends V> entry) {
|
||||
super(entry.getKey(), entry.getValue());
|
||||
}
|
||||
|
||||
|
@ -46,7 +46,7 @@ public final class UnmodifiableMapEntry<K, V> extends AbstractMapEntry<K, V> imp
|
||||
* @param pair the pair to copy, must not be null
|
||||
* @throws NullPointerException if the entry is null
|
||||
*/
|
||||
public UnmodifiableMapEntry(final KeyValue<K, V> pair) {
|
||||
public UnmodifiableMapEntry(final KeyValue<? extends K, ? extends V> pair) {
|
||||
super(pair.getKey(), pair.getValue());
|
||||
}
|
||||
|
||||
@ -56,7 +56,7 @@ public final class UnmodifiableMapEntry<K, V> extends AbstractMapEntry<K, V> imp
|
||||
* @param entry the entry to copy, must not be null
|
||||
* @throws NullPointerException if the entry is null
|
||||
*/
|
||||
public UnmodifiableMapEntry(final Map.Entry<K, V> entry) {
|
||||
public UnmodifiableMapEntry(final Map.Entry<? extends K, ? extends V> entry) {
|
||||
super(entry.getKey(), entry.getValue());
|
||||
}
|
||||
|
||||
|
@ -77,7 +77,7 @@ public class CursorableLinkedList<E> extends AbstractLinkedList<E> implements Se
|
||||
*
|
||||
* @param coll the collection to copy
|
||||
*/
|
||||
public CursorableLinkedList(final Collection<E> coll) {
|
||||
public CursorableLinkedList(final Collection<? extends E> coll) {
|
||||
super(coll);
|
||||
}
|
||||
|
||||
|
@ -79,7 +79,7 @@ public class NodeCachingLinkedList<E> extends AbstractLinkedList<E> implements S
|
||||
*
|
||||
* @param coll the collection to copy
|
||||
*/
|
||||
public NodeCachingLinkedList(final Collection<E> coll) {
|
||||
public NodeCachingLinkedList(final Collection<? extends E> coll) {
|
||||
super(coll);
|
||||
this.maximumCacheSize = DEFAULT_MAXIMUM_CACHE_SIZE;
|
||||
}
|
||||
|
@ -81,7 +81,7 @@ public class TreeList<E> extends AbstractList<E> {
|
||||
* @param coll the collection to copy
|
||||
* @throws NullPointerException if the collection is null
|
||||
*/
|
||||
public TreeList(final Collection<E> coll) {
|
||||
public TreeList(final Collection<? extends E> coll) {
|
||||
super();
|
||||
if (!coll.isEmpty()) {
|
||||
root = new AVLNode<E>(coll);
|
||||
|
@ -51,9 +51,11 @@ public final class UnmodifiableList<E>
|
||||
* @throws IllegalArgumentException if list is null
|
||||
* @since 4.0
|
||||
*/
|
||||
public static <E> List<E> unmodifiableList(final List<E> list) {
|
||||
public static <E> List<E> unmodifiableList(final List<? extends E> list) {
|
||||
if (list instanceof Unmodifiable) {
|
||||
return list;
|
||||
@SuppressWarnings("unchecked") // safe to upcast
|
||||
final List<E> tmpList = (List<E>) list;
|
||||
return tmpList;
|
||||
}
|
||||
return new UnmodifiableList<E>(list);
|
||||
}
|
||||
@ -64,10 +66,10 @@ public final class UnmodifiableList<E>
|
||||
*
|
||||
* @param list the list to decorate, must not be null
|
||||
* @throws IllegalArgumentException if list is null
|
||||
* @since Commons Collection 5
|
||||
*/
|
||||
public UnmodifiableList(final List<E> list) {
|
||||
super(list);
|
||||
@SuppressWarnings("unchecked") // safe to upcast
|
||||
public UnmodifiableList(final List<? extends E> list) {
|
||||
super((List<E>) list);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
@ -157,7 +157,7 @@ public class AbstractHashedMap<K, V> extends AbstractMap<K, V> implements Iterab
|
||||
* @param map the map to copy
|
||||
* @throws NullPointerException if the map is null
|
||||
*/
|
||||
protected AbstractHashedMap(final Map<K, V> map) {
|
||||
protected AbstractHashedMap(final Map<? extends K, ? extends V> map) {
|
||||
this(Math.max(2 * map.size(), DEFAULT_CAPACITY), DEFAULT_LOAD_FACTOR);
|
||||
_putAll(map);
|
||||
}
|
||||
|
@ -111,7 +111,7 @@ public abstract class AbstractLinkedMap<K, V> extends AbstractHashedMap<K, V> im
|
||||
* @param map the map to copy
|
||||
* @throws NullPointerException if the map is null
|
||||
*/
|
||||
protected AbstractLinkedMap(final Map<K, V> map) {
|
||||
protected AbstractLinkedMap(final Map<? extends K, ? extends V> map) {
|
||||
super(map);
|
||||
}
|
||||
|
||||
|
@ -105,7 +105,7 @@ public class CaseInsensitiveMap<K, V> extends AbstractHashedMap<K, V> implements
|
||||
* @param map the map to copy
|
||||
* @throws NullPointerException if the map is null
|
||||
*/
|
||||
public CaseInsensitiveMap(final Map<K, V> map) {
|
||||
public CaseInsensitiveMap(final Map<? extends K, ? extends V> map) {
|
||||
super(map);
|
||||
}
|
||||
|
||||
|
@ -81,7 +81,7 @@ public class HashedMap<K, V>
|
||||
* @param map the map to copy
|
||||
* @throws NullPointerException if the map is null
|
||||
*/
|
||||
public HashedMap(final Map<K, V> map) {
|
||||
public HashedMap(final Map<? extends K, ? extends V> map) {
|
||||
super(map);
|
||||
}
|
||||
|
||||
|
@ -141,7 +141,7 @@ public class LRUMap<K, V>
|
||||
* @throws NullPointerException if the map is null
|
||||
* @throws IllegalArgumentException if the map is empty
|
||||
*/
|
||||
public LRUMap(final Map<K, V> map) {
|
||||
public LRUMap(final Map<? extends K, ? extends V> map) {
|
||||
this(map, false);
|
||||
}
|
||||
|
||||
@ -156,7 +156,7 @@ public class LRUMap<K, V>
|
||||
* @throws IllegalArgumentException if the map is empty
|
||||
* @since 3.1
|
||||
*/
|
||||
public LRUMap(final Map<K, V> map, final boolean scanUntilRemovable) {
|
||||
public LRUMap(final Map<? extends K, ? extends V> map, final boolean scanUntilRemovable) {
|
||||
this(map.size(), DEFAULT_LOAD_FACTOR, scanUntilRemovable);
|
||||
putAll(map);
|
||||
}
|
||||
|
@ -101,7 +101,7 @@ public class LinkedMap<K, V> extends AbstractLinkedMap<K, V> implements Serializ
|
||||
* @param map the map to copy
|
||||
* @throws NullPointerException if the map is null
|
||||
*/
|
||||
public LinkedMap(final Map<K, V> map) {
|
||||
public LinkedMap(final Map<? extends K, ? extends V> map) {
|
||||
super(map);
|
||||
}
|
||||
|
||||
|
@ -103,7 +103,7 @@ public class SingletonMap<K, V>
|
||||
*
|
||||
* @param mapEntry the mapEntry to use
|
||||
*/
|
||||
public SingletonMap(final Map.Entry<K, V> mapEntry) {
|
||||
public SingletonMap(final Map.Entry<? extends K, ? extends V> mapEntry) {
|
||||
super();
|
||||
this.key = mapEntry.getKey();
|
||||
this.value = mapEntry.getValue();
|
||||
@ -116,12 +116,12 @@ public class SingletonMap<K, V>
|
||||
* @throws NullPointerException if the map is null
|
||||
* @throws IllegalArgumentException if the size is not 1
|
||||
*/
|
||||
public SingletonMap(final Map<K, V> map) {
|
||||
public SingletonMap(final Map<? extends K, ? extends V> map) {
|
||||
super();
|
||||
if (map.size() != 1) {
|
||||
throw new IllegalArgumentException("The map size must be 1");
|
||||
}
|
||||
final Map.Entry<K, V> entry = map.entrySet().iterator().next();
|
||||
final Map.Entry<? extends K, ? extends V> entry = map.entrySet().iterator().next();
|
||||
this.key = entry.getKey();
|
||||
this.value = entry.getValue();
|
||||
}
|
||||
|
@ -59,9 +59,11 @@ public final class UnmodifiableMap<K, V>
|
||||
* @throws IllegalArgumentException if map is null
|
||||
* @since 4.0
|
||||
*/
|
||||
public static <K, V> Map<K, V> unmodifiableMap(final Map<K, V> map) {
|
||||
public static <K, V> Map<K, V> unmodifiableMap(final Map<? extends K, ? extends V> map) {
|
||||
if (map instanceof Unmodifiable) {
|
||||
return map;
|
||||
@SuppressWarnings("unchecked") // safe to upcast
|
||||
final Map<K, V> tmpMap = (Map<K, V>) map;
|
||||
return tmpMap;
|
||||
}
|
||||
return new UnmodifiableMap<K, V>(map);
|
||||
}
|
||||
@ -73,8 +75,9 @@ public final class UnmodifiableMap<K, V>
|
||||
* @param map the map to decorate, must not be null
|
||||
* @throws IllegalArgumentException if map is null
|
||||
*/
|
||||
private UnmodifiableMap(final Map<K, V> map) {
|
||||
super(map);
|
||||
@SuppressWarnings("unchecked") // safe to upcast
|
||||
private UnmodifiableMap(final Map<? extends K, ? extends V> map) {
|
||||
super((Map<K, V>) map);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
@ -57,9 +57,11 @@ public final class UnmodifiableOrderedMap<K, V> extends AbstractOrderedMapDecora
|
||||
* @throws IllegalArgumentException if map is null
|
||||
* @since 4.0
|
||||
*/
|
||||
public static <K, V> OrderedMap<K, V> unmodifiableOrderedMap(final OrderedMap<K, V> map) {
|
||||
public static <K, V> OrderedMap<K, V> unmodifiableOrderedMap(final OrderedMap<? extends K, ? extends V> map) {
|
||||
if (map instanceof Unmodifiable) {
|
||||
return map;
|
||||
@SuppressWarnings("unchecked") // safe to upcast
|
||||
final OrderedMap<K, V> tmpMap = (OrderedMap<K, V>) map;
|
||||
return tmpMap;
|
||||
}
|
||||
return new UnmodifiableOrderedMap<K, V>(map);
|
||||
}
|
||||
@ -71,8 +73,9 @@ public final class UnmodifiableOrderedMap<K, V> extends AbstractOrderedMapDecora
|
||||
* @param map the map to decorate, must not be null
|
||||
* @throws IllegalArgumentException if map is null
|
||||
*/
|
||||
private UnmodifiableOrderedMap(final OrderedMap<K, V> map) {
|
||||
super(map);
|
||||
@SuppressWarnings("unchecked") // safe to upcast
|
||||
private UnmodifiableOrderedMap(final OrderedMap<? extends K, ? extends V> map) {
|
||||
super((OrderedMap<K, V>) map);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
@ -57,9 +57,11 @@ public final class UnmodifiableSortedMap<K, V>
|
||||
* @throws IllegalArgumentException if map is null
|
||||
* @since 4.0
|
||||
*/
|
||||
public static <K, V> SortedMap<K, V> unmodifiableSortedMap(final SortedMap<K, V> map) {
|
||||
public static <K, V> SortedMap<K, V> unmodifiableSortedMap(final SortedMap<K, ? extends V> map) {
|
||||
if (map instanceof Unmodifiable) {
|
||||
return map;
|
||||
@SuppressWarnings("unchecked") // safe to upcast
|
||||
final SortedMap<K, V> tmpMap = (SortedMap<K, V>) map;
|
||||
return tmpMap;
|
||||
}
|
||||
return new UnmodifiableSortedMap<K, V>(map);
|
||||
}
|
||||
@ -71,8 +73,9 @@ public final class UnmodifiableSortedMap<K, V>
|
||||
* @param map the map to decorate, must not be null
|
||||
* @throws IllegalArgumentException if map is null
|
||||
*/
|
||||
private UnmodifiableSortedMap(final SortedMap<K, V> map) {
|
||||
super(map);
|
||||
@SuppressWarnings("unchecked") // safe to upcast
|
||||
private UnmodifiableSortedMap(final SortedMap<K, ? extends V> map) {
|
||||
super((SortedMap<K, V>) map);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
@ -102,7 +102,7 @@ public class CircularFifoQueue<E> extends AbstractCollection<E>
|
||||
* @param coll the collection to copy into the queue, may not be null
|
||||
* @throws NullPointerException if the collection is null
|
||||
*/
|
||||
public CircularFifoQueue(final Collection<E> coll) {
|
||||
public CircularFifoQueue(final Collection<? extends E> coll) {
|
||||
this(coll.size());
|
||||
addAll(coll);
|
||||
}
|
||||
|
@ -52,9 +52,11 @@ public final class UnmodifiableQueue<E>
|
||||
* @return an unmodifiable Queue
|
||||
* @throws IllegalArgumentException if queue is null
|
||||
*/
|
||||
public static <E> Queue<E> unmodifiableQueue(final Queue<E> queue) {
|
||||
public static <E> Queue<E> unmodifiableQueue(final Queue<? extends E> queue) {
|
||||
if (queue instanceof Unmodifiable) {
|
||||
return queue;
|
||||
@SuppressWarnings("unchecked") // safe to upcast
|
||||
final Queue<E> tmpQueue = (Queue<E>) queue;
|
||||
return tmpQueue;
|
||||
}
|
||||
return new UnmodifiableQueue<E>(queue);
|
||||
}
|
||||
@ -66,8 +68,9 @@ public final class UnmodifiableQueue<E>
|
||||
* @param queue the queue to decorate, must not be null
|
||||
* @throws IllegalArgumentException if queue is null
|
||||
*/
|
||||
private UnmodifiableQueue(final Queue<E> queue) {
|
||||
super(queue);
|
||||
@SuppressWarnings("unchecked") // safe to upcast
|
||||
private UnmodifiableQueue(final Queue<? extends E> queue) {
|
||||
super((Queue<E>) queue);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
@ -49,9 +49,11 @@ public final class UnmodifiableSet<E>
|
||||
* @throws IllegalArgumentException if set is null
|
||||
* @since 4.0
|
||||
*/
|
||||
public static <E> Set<E> unmodifiableSet(final Set<E> set) {
|
||||
public static <E> Set<E> unmodifiableSet(final Set<? extends E> set) {
|
||||
if (set instanceof Unmodifiable) {
|
||||
return set;
|
||||
@SuppressWarnings("unchecked") // safe to upcast
|
||||
final Set<E> tmpSet = (Set<E>) set;
|
||||
return tmpSet;
|
||||
}
|
||||
return new UnmodifiableSet<E>(set);
|
||||
}
|
||||
@ -63,14 +65,15 @@ public final class UnmodifiableSet<E>
|
||||
* @param set the set to decorate, must not be null
|
||||
* @throws IllegalArgumentException if set is null
|
||||
*/
|
||||
private UnmodifiableSet(final Set<E> set) {
|
||||
super(set);
|
||||
@SuppressWarnings("unchecked") // safe to upcast
|
||||
private UnmodifiableSet(final Set<? extends E> set) {
|
||||
super((Set<E>) set);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
@Override
|
||||
public Iterator<E> iterator() {
|
||||
return UnmodifiableIterator.<E>unmodifiableIterator(decorated().iterator());
|
||||
return UnmodifiableIterator.unmodifiableIterator(decorated().iterator());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -51,7 +51,7 @@ public class UnmodifiableTrie<K, V> implements Trie<K, V>, Serializable, Unmodif
|
||||
* @return a new unmodifiable trie
|
||||
* @throws IllegalArgumentException if trie is null
|
||||
*/
|
||||
public static <K, V> UnmodifiableTrie<K, V> unmodifiableTrie(final Trie<K, V> trie) {
|
||||
public static <K, V> UnmodifiableTrie<K, V> unmodifiableTrie(final Trie<K, ? extends V> trie) {
|
||||
return new UnmodifiableTrie<K, V>(trie);
|
||||
}
|
||||
|
||||
@ -62,11 +62,13 @@ public class UnmodifiableTrie<K, V> implements Trie<K, V>, Serializable, Unmodif
|
||||
* @param trie the trie to decorate, must not be null
|
||||
* @throws IllegalArgumentException if trie is null
|
||||
*/
|
||||
public UnmodifiableTrie(final Trie<K, V> trie) {
|
||||
public UnmodifiableTrie(final Trie<K, ? extends V> trie) {
|
||||
if (trie == null) {
|
||||
throw new IllegalArgumentException("Trie must not be null");
|
||||
}
|
||||
this.delegate = trie;
|
||||
@SuppressWarnings("unchecked") // safe to upcast
|
||||
final Trie<K, V> tmpTrie = (Trie<K, V>) trie;
|
||||
this.delegate = tmpTrie;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
Loading…
x
Reference in New Issue
Block a user