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:54:48 UTC

[03/77] [abbrv] commons-collections git commit: finish generics (minus one class)

http://git-wip-us.apache.org/repos/asf/commons-collections/blob/884baf0d/src/test/org/apache/commons/collections/map/TestLazyMap.java
----------------------------------------------------------------------
diff --git a/src/test/org/apache/commons/collections/map/TestLazyMap.java b/src/test/org/apache/commons/collections/map/TestLazyMap.java
index ae3cb4f..d3394fb 100644
--- a/src/test/org/apache/commons/collections/map/TestLazyMap.java
+++ b/src/test/org/apache/commons/collections/map/TestLazyMap.java
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -27,38 +27,38 @@ import org.apache.commons.collections.Transformer;
 import org.junit.Test;
 
 /**
- * Extension of {@link TestMap} for exercising the 
+ * Extension of {@link TestMap} for exercising the
  * {@link LazyMap} implementation.
  *
  * @since Commons Collections 3.0
  * @version $Revision$ $Date$
- * 
+ *
  * @author Phil Steitz
  */
-public class TestLazyMap extends AbstractTestMap {
-    
+public class TestLazyMap<K, V> extends AbstractTestMap<K, V> {
+
 	private static final Factory<Integer> oneFactory = FactoryUtils.constantFactory(1);
-    
+
     public TestLazyMap(String testName) {
         super(testName);
     }
-    
+
     public static void main(String args[]) {
         String[] testCaseName = { TestLazyMap.class.getName()};
         junit.textui.TestRunner.main(testCaseName);
     }
 
     @Override
-	public <K,V> Map<K,V> makeEmptyMap() {
+	public LazyMap<K,V> makeObject() {
         return getLazyMap(new HashMap<K,V>(), FactoryUtils.<V>nullFactory());
     }
-    
+
     //-----------------------------------------------------------------------
     @Override
     public void testMapGet() {
     	//TODO eliminate need for this via superclass - see svn history.
     }
-    
+
     @Test
     public void mapGetWithFactory() {
         Map<Integer, Number> map = getLazyMap(new HashMap<Integer,Number>(), oneFactory);
@@ -70,13 +70,13 @@ public class TestLazyMap extends AbstractTestMap {
         assertEquals(1, i2);
         assertEquals(1, map.size());
         assertSame(i1, i2);
-        
+
         map = getLazyMap(new HashMap<Integer,Number>(), FactoryUtils.<Long>nullFactory());
         Object o = map.get("Five");
         assertEquals(null,o);
         assertEquals(1, map.size());
     }
-    
+
     @Test
     public void mapGetWithTransformer() {
     	Transformer<Number, Integer> intConverter = new Transformer<Number, Integer>(){
@@ -90,8 +90,8 @@ public class TestLazyMap extends AbstractTestMap {
     	assertEquals(123, i1);
     	assertEquals(1, map.size());
     }
-    
-    
+
+
     @Override
 	public String getCompatibilityVersion() {
         return "3.1";

http://git-wip-us.apache.org/repos/asf/commons-collections/blob/884baf0d/src/test/org/apache/commons/collections/map/TestLazySortedMap.java
----------------------------------------------------------------------
diff --git a/src/test/org/apache/commons/collections/map/TestLazySortedMap.java b/src/test/org/apache/commons/collections/map/TestLazySortedMap.java
index 2c56c46..c4841c4 100644
--- a/src/test/org/apache/commons/collections/map/TestLazySortedMap.java
+++ b/src/test/org/apache/commons/collections/map/TestLazySortedMap.java
@@ -38,7 +38,7 @@ import org.junit.Test;
  * 
  * @author Phil Steitz
  */
-public class TestLazySortedMap extends AbstractTestSortedMap {
+public class TestLazySortedMap<K, V> extends AbstractTestSortedMap<K, V> {
     
 	private static final Factory<Integer> oneFactory = FactoryUtils.constantFactory(1);
    
@@ -52,14 +52,10 @@ public class TestLazySortedMap extends AbstractTestSortedMap {
     }
 
     @Override
-	public <K,V> Map<K,V> makeEmptyMap() {
+	public SortedMap<K,V> makeObject() {
         return getLazySortedMap(new TreeMap<K,V>(), FactoryUtils.<V>nullFactory());
     }
     
-    private <K,V> SortedMap<K,V> makeTestSortedMap(Factory<V> factory) {
-        return getLazySortedMap(new TreeMap<K,V>(), factory);
-    }
-    
     @Override
 	public boolean isSubMapViewsSerializable() {
         // TODO TreeMap sub map views have a bug in deserialization.

http://git-wip-us.apache.org/repos/asf/commons-collections/blob/884baf0d/src/test/org/apache/commons/collections/map/TestLinkedMap.java
----------------------------------------------------------------------
diff --git a/src/test/org/apache/commons/collections/map/TestLinkedMap.java b/src/test/org/apache/commons/collections/map/TestLinkedMap.java
index 326ce33..a298612 100644
--- a/src/test/org/apache/commons/collections/map/TestLinkedMap.java
+++ b/src/test/org/apache/commons/collections/map/TestLinkedMap.java
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -32,12 +32,12 @@ import org.apache.commons.collections.list.AbstractTestList;
 
 /**
  * JUnit tests.
- * 
+ *
  * @version $Revision$ $Date$
- * 
+ *
  * @author Stephen Colebourne
  */
-public class TestLinkedMap extends AbstractTestOrderedMap {
+public class TestLinkedMap<K, V> extends AbstractTestOrderedMap<K, V> {
 
     public TestLinkedMap(String testName) {
         super(testName);
@@ -46,127 +46,137 @@ public class TestLinkedMap extends AbstractTestOrderedMap {
     public static void main(String[] args) {
         TestRunner.run(suite());
     }
-    
+
     public static Test suite() {
         return BulkTest.makeSuite(TestLinkedMap.class);
     }
 
-    public Map makeEmptyMap() {
-        return new LinkedMap();
+    public LinkedMap<K, V> makeObject() {
+        return new LinkedMap<K, V>();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public LinkedMap<K, V> makeFullMap() {
+        return (LinkedMap<K, V>) super.makeFullMap();
     }
 
     public String getCompatibilityVersion() {
         return "3";
     }
 
-    //-----------------------------------------------------------------------    
+    //-----------------------------------------------------------------------
+    @SuppressWarnings("unchecked")
     public void testReset() {
         resetEmpty();
-        OrderedMap ordered = (OrderedMap) map;
-        ((ResettableIterator) ordered.mapIterator()).reset();
-        
+        OrderedMap<K, V> ordered = getMap();
+        ((ResettableIterator<K>) ordered.mapIterator()).reset();
+
         resetFull();
-        ordered = (OrderedMap) map;
-        List list = new ArrayList(ordered.keySet());
-        ResettableIterator it = (ResettableIterator) ordered.mapIterator();
+        ordered = getMap();
+        List<K> list = new ArrayList<K>(ordered.keySet());
+        ResettableIterator<K> it = (ResettableIterator<K>) ordered.mapIterator();
         assertSame(list.get(0), it.next());
         assertSame(list.get(1), it.next());
         it.reset();
         assertSame(list.get(0), it.next());
     }
-    
+
     //-----------------------------------------------------------------------
     public void testInsertionOrder() {
         if (isPutAddSupported() == false || isPutChangeSupported() == false) return;
-        Object[] keys = getSampleKeys();
-        Object[] values = getSampleValues();
-        Iterator it = null;
-        
+        K[] keys = getSampleKeys();
+        V[] values = getSampleValues();
+        Iterator<K> keyIter;
+        Iterator<V> valueIter;
+
         resetEmpty();
         map.put(keys[0], values[0]);
         map.put(keys[1], values[1]);
-        it = map.keySet().iterator();
-        assertSame(keys[0], it.next());
-        assertSame(keys[1], it.next());
-        it = map.values().iterator();
-        assertSame(values[0], it.next());
-        assertSame(values[1], it.next());
+        keyIter = map.keySet().iterator();
+        assertSame(keys[0], keyIter.next());
+        assertSame(keys[1], keyIter.next());
+        valueIter = map.values().iterator();
+        assertSame(values[0], valueIter.next());
+        assertSame(values[1], valueIter.next());
 
         // no change to order
         map.put(keys[1], values[1]);
-        it = map.keySet().iterator();
-        assertSame(keys[0], it.next());
-        assertSame(keys[1], it.next());
-        it = map.values().iterator();
-        assertSame(values[0], it.next());
-        assertSame(values[1], it.next());
+        keyIter = map.keySet().iterator();
+        assertSame(keys[0], keyIter.next());
+        assertSame(keys[1], keyIter.next());
+        valueIter = map.values().iterator();
+        assertSame(values[0], valueIter.next());
+        assertSame(values[1], valueIter.next());
 
         // no change to order
         map.put(keys[1], values[2]);
-        it = map.keySet().iterator();
-        assertSame(keys[0], it.next());
-        assertSame(keys[1], it.next());
-        it = map.values().iterator();
-        assertSame(values[0], it.next());
-        assertSame(values[2], it.next());
+        keyIter = map.keySet().iterator();
+        assertSame(keys[0], keyIter.next());
+        assertSame(keys[1], keyIter.next());
+        valueIter = map.values().iterator();
+        assertSame(values[0], valueIter.next());
+        assertSame(values[2], valueIter.next());
 
         // no change to order
         map.put(keys[0], values[3]);
-        it = map.keySet().iterator();
-        assertSame(keys[0], it.next());
-        assertSame(keys[1], it.next());
-        it = map.values().iterator();
-        assertSame(values[3], it.next());
-        assertSame(values[2], it.next());
+        keyIter = map.keySet().iterator();
+        assertSame(keys[0], keyIter.next());
+        assertSame(keys[1], keyIter.next());
+        valueIter = map.values().iterator();
+        assertSame(values[3], valueIter.next());
+        assertSame(values[2], valueIter.next());
     }
-    
+
     //-----------------------------------------------------------------------
     public void testGetByIndex() {
         resetEmpty();
-        LinkedMap lm = (LinkedMap) map;
+        LinkedMap<K, V> lm = getMap();
         try {
             lm.get(0);
         } catch (IndexOutOfBoundsException ex) {}
         try {
             lm.get(-1);
         } catch (IndexOutOfBoundsException ex) {}
-        
+
         resetFull();
-        lm = (LinkedMap) map;
+        lm = getMap();
         try {
             lm.get(-1);
         } catch (IndexOutOfBoundsException ex) {}
         try {
             lm.get(lm.size());
         } catch (IndexOutOfBoundsException ex) {}
-        
+
         int i = 0;
-        for (MapIterator it = lm.mapIterator(); it.hasNext(); i++) {
+        for (MapIterator<K, V> it = lm.mapIterator(); it.hasNext(); i++) {
             assertSame(it.next(), lm.get(i));
         }
     }
 
     public void testGetValueByIndex() {
         resetEmpty();
-        LinkedMap lm = (LinkedMap) map;
+        LinkedMap<K, V> lm = getMap();
         try {
             lm.getValue(0);
         } catch (IndexOutOfBoundsException ex) {}
         try {
             lm.getValue(-1);
         } catch (IndexOutOfBoundsException ex) {}
-        
+
         resetFull();
-        lm = (LinkedMap) map;
+        lm = getMap();
         try {
             lm.getValue(-1);
         } catch (IndexOutOfBoundsException ex) {}
         try {
             lm.getValue(lm.size());
         } catch (IndexOutOfBoundsException ex) {}
-        
+
         int i = 0;
-        for (MapIterator it = lm.mapIterator(); it.hasNext(); i++) {
+        for (MapIterator<K, V> it = lm.mapIterator(); it.hasNext(); i++) {
             it.next();
             assertSame(it.getValue(), lm.getValue(i));
         }
@@ -174,13 +184,13 @@ public class TestLinkedMap extends AbstractTestOrderedMap {
 
     public void testIndexOf() {
         resetEmpty();
-        LinkedMap lm = (LinkedMap) map;
+        LinkedMap<K, V> lm = getMap();
         assertEquals(-1, lm.indexOf(getOtherKeys()));
-        
+
         resetFull();
-        lm = (LinkedMap) map;
-        List list = new ArrayList();
-        for (MapIterator it = lm.mapIterator(); it.hasNext();) {
+        lm = getMap();
+        List<K> list = new ArrayList<K>();
+        for (MapIterator<K, V> it = lm.mapIterator(); it.hasNext();) {
             list.add(it.next());
         }
         for (int i = 0; i < list.size(); i++) {
@@ -190,25 +200,25 @@ public class TestLinkedMap extends AbstractTestOrderedMap {
 
     public void testRemoveByIndex() {
         resetEmpty();
-        LinkedMap lm = (LinkedMap) map;
+        LinkedMap<K, V> lm = getMap();
         try {
             lm.remove(0);
         } catch (IndexOutOfBoundsException ex) {}
         try {
             lm.remove(-1);
         } catch (IndexOutOfBoundsException ex) {}
-        
+
         resetFull();
-        lm = (LinkedMap) map;
+        lm = getMap();
         try {
             lm.remove(-1);
         } catch (IndexOutOfBoundsException ex) {}
         try {
             lm.remove(lm.size());
         } catch (IndexOutOfBoundsException ex) {}
-        
-        List list = new ArrayList();
-        for (MapIterator it = lm.mapIterator(); it.hasNext();) {
+
+        List<K> list = new ArrayList<K>();
+        for (MapIterator<K, V> it = lm.mapIterator(); it.hasNext();) {
             list.add(it.next());
         }
         for (int i = 0; i < list.size(); i++) {
@@ -219,26 +229,26 @@ public class TestLinkedMap extends AbstractTestOrderedMap {
             assertEquals(false, lm.containsKey(key));
         }
     }
-    
+
     public BulkTest bulkTestListView() {
         return new TestListView();
     }
-    
-    public class TestListView extends AbstractTestList {
-        
+
+    public class TestListView extends AbstractTestList<K> {
+
         TestListView() {
             super("TestListView");
         }
 
-        public List makeEmptyList() {
-            return ((LinkedMap) TestLinkedMap.this.makeEmptyMap()).asList();
+        public List<K> makeObject() {
+            return TestLinkedMap.this.makeObject().asList();
         }
-        
-        public List makeFullList() {
-            return ((LinkedMap) TestLinkedMap.this.makeFullMap()).asList();
+
+        public List<K> makeFullCollection() {
+            return TestLinkedMap.this.makeFullMap().asList();
         }
-        
-        public Object[] getFullElements() {
+
+        public K[] getFullElements() {
             return TestLinkedMap.this.getSampleKeys();
         }
         public boolean isAddSupported() {
@@ -258,18 +268,27 @@ public class TestLinkedMap extends AbstractTestOrderedMap {
         }
     }
 
+    @SuppressWarnings("unchecked")
     public void testClone() {
-        LinkedMap map = new LinkedMap(10);
-        map.put("1", "1");
-        Map cloned = (Map) map.clone();
+        LinkedMap<K, V> map = new LinkedMap<K, V>(10);
+        map.put((K) "1", (V) "1");
+        Map<K, V> cloned = map.clone();
         assertEquals(map.size(), cloned.size());
         assertSame(map.get("1"), cloned.get("1"));
     }
-    
+
 //    public void testCreate() throws Exception {
 //        resetEmpty();
 //        writeExternalFormToDisk((java.io.Serializable) map, "D:/dev/collections/data/test/LinkedMap.emptyCollection.version3.obj");
 //        resetFull();
 //        writeExternalFormToDisk((java.io.Serializable) map, "D:/dev/collections/data/test/LinkedMap.fullCollection.version3.obj");
 //    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public LinkedMap<K, V> getMap() {
+        return (LinkedMap<K, V>) super.getMap();
+    }
 }

http://git-wip-us.apache.org/repos/asf/commons-collections/blob/884baf0d/src/test/org/apache/commons/collections/map/TestListOrderedMap.java
----------------------------------------------------------------------
diff --git a/src/test/org/apache/commons/collections/map/TestListOrderedMap.java b/src/test/org/apache/commons/collections/map/TestListOrderedMap.java
index 2d4c3ab..7187d77 100644
--- a/src/test/org/apache/commons/collections/map/TestListOrderedMap.java
+++ b/src/test/org/apache/commons/collections/map/TestListOrderedMap.java
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -19,7 +19,6 @@ package org.apache.commons.collections.map;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 import junit.framework.Test;
 
@@ -33,12 +32,12 @@ import org.apache.commons.collections.list.AbstractTestList;
  *
  * @since Commons Collections 3.0
  * @version $Revision$ $Date$
- * 
+ *
  * @author Henri Yandell
  * @author Stephen Colebourne
  * @author Matt Benson
  */
-public class TestListOrderedMap extends AbstractTestOrderedMap {
+public class TestListOrderedMap<K, V> extends AbstractTestOrderedMap<K, V> {
 
     public TestListOrderedMap(String testName) {
         super(testName);
@@ -53,57 +52,65 @@ public class TestListOrderedMap extends AbstractTestOrderedMap {
         junit.textui.TestRunner.main(testCaseName);
     }
 
-    public Map makeEmptyMap() {
-        return ListOrderedMap.decorate(new HashMap());
+    public ListOrderedMap<K, V> makeObject() {
+        return (ListOrderedMap<K, V>) ListOrderedMap.decorate(new HashMap<K, V>());
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public ListOrderedMap<K, V> makeFullMap() {
+        return (ListOrderedMap<K, V>) super.makeFullMap();
     }
-    
+
     //-----------------------------------------------------------------------
     public void testGetByIndex() {
         resetEmpty();
-        ListOrderedMap lom = (ListOrderedMap) map;
+        ListOrderedMap<K, V> lom = getMap();
         try {
             lom.get(0);
         } catch (IndexOutOfBoundsException ex) {}
         try {
             lom.get(-1);
         } catch (IndexOutOfBoundsException ex) {}
-        
+
         resetFull();
-        lom = (ListOrderedMap) map;
+        lom = getMap();
         try {
             lom.get(-1);
         } catch (IndexOutOfBoundsException ex) {}
         try {
             lom.get(lom.size());
         } catch (IndexOutOfBoundsException ex) {}
-        
+
         int i = 0;
-        for (MapIterator it = lom.mapIterator(); it.hasNext(); i++) {
+        for (MapIterator<K, V> it = lom.mapIterator(); it.hasNext(); i++) {
             assertSame(it.next(), lom.get(i));
         }
     }
 
     public void testGetValueByIndex() {
         resetEmpty();
-        ListOrderedMap lom = (ListOrderedMap) map;
+        ListOrderedMap<K, V> lom = getMap();
         try {
             lom.getValue(0);
         } catch (IndexOutOfBoundsException ex) {}
         try {
             lom.getValue(-1);
         } catch (IndexOutOfBoundsException ex) {}
-        
+
         resetFull();
-        lom = (ListOrderedMap) map;
+        lom = getMap();
         try {
             lom.getValue(-1);
         } catch (IndexOutOfBoundsException ex) {}
         try {
             lom.getValue(lom.size());
         } catch (IndexOutOfBoundsException ex) {}
-        
+
         int i = 0;
-        for (MapIterator it = lom.mapIterator(); it.hasNext(); i++) {
+        for (MapIterator<K, V> it = lom.mapIterator(); it.hasNext(); i++) {
             it.next();
             assertSame(it.getValue(), lom.getValue(i));
         }
@@ -111,13 +118,13 @@ public class TestListOrderedMap extends AbstractTestOrderedMap {
 
     public void testIndexOf() {
         resetEmpty();
-        ListOrderedMap lom = (ListOrderedMap) map;
+        ListOrderedMap<K, V> lom = getMap();
         assertEquals(-1, lom.indexOf(getOtherKeys()));
-        
+
         resetFull();
-        lom = (ListOrderedMap) map;
-        List list = new ArrayList();
-        for (MapIterator it = lom.mapIterator(); it.hasNext();) {
+        lom = getMap();
+        List<K> list = new ArrayList<K>();
+        for (MapIterator<K, V> it = lom.mapIterator(); it.hasNext();) {
             list.add(it.next());
         }
         for (int i = 0; i < list.size(); i++) {
@@ -125,54 +132,55 @@ public class TestListOrderedMap extends AbstractTestOrderedMap {
         }
     }
 
+    @SuppressWarnings("unchecked")
     public void testSetValueByIndex() {
         resetEmpty();
-        ListOrderedMap lom = (ListOrderedMap) map;
+        ListOrderedMap<K, V> lom = getMap();
         try {
-            lom.setValue(0, "");
+            lom.setValue(0, (V) "");
         } catch (IndexOutOfBoundsException ex) {}
         try {
-            lom.setValue(-1, "");
+            lom.setValue(-1, (V) "");
         } catch (IndexOutOfBoundsException ex) {}
-        
+
         resetFull();
-        lom = (ListOrderedMap) map;
+        lom = getMap();
         try {
-            lom.setValue(-1, "");
+            lom.setValue(-1, (V) "");
         } catch (IndexOutOfBoundsException ex) {}
         try {
-            lom.setValue(lom.size(), "");
+            lom.setValue(lom.size(), (V) "");
         } catch (IndexOutOfBoundsException ex) {}
-        
+
         for (int i = 0; i < lom.size(); i++) {
-            Object value = lom.getValue(i);
+            V value = lom.getValue(i);
             Object input = new Integer(i);
-            assertEquals(value, lom.setValue(i, input));
+            assertEquals(value, lom.setValue(i, (V) input));
             assertEquals(input, lom.getValue(i));
         }
     }
 
     public void testRemoveByIndex() {
         resetEmpty();
-        ListOrderedMap lom = (ListOrderedMap) map;
+        ListOrderedMap<K, V> lom = getMap();
         try {
             lom.remove(0);
         } catch (IndexOutOfBoundsException ex) {}
         try {
             lom.remove(-1);
         } catch (IndexOutOfBoundsException ex) {}
-        
+
         resetFull();
-        lom = (ListOrderedMap) map;
+        lom = getMap();
         try {
             lom.remove(-1);
         } catch (IndexOutOfBoundsException ex) {}
         try {
             lom.remove(lom.size());
         } catch (IndexOutOfBoundsException ex) {}
-        
-        List list = new ArrayList();
-        for (MapIterator it = lom.mapIterator(); it.hasNext();) {
+
+        List<K> list = new ArrayList<K>();
+        for (MapIterator<K, V> it = lom.mapIterator(); it.hasNext();) {
             list.add(it.next());
         }
         for (int i = 0; i < list.size(); i++) {
@@ -184,74 +192,75 @@ public class TestListOrderedMap extends AbstractTestOrderedMap {
         }
     }
 
+    @SuppressWarnings("unchecked")
     public void testPut_intObjectObject() {
         resetEmpty();
-        ListOrderedMap lom = (ListOrderedMap) map;
-        
+        ListOrderedMap<K, V> lom = getMap();
+
         try {
-            lom.put(1, "testInsert1", "testInsert1v");
+            lom.put(1, (K) "testInsert1", (V) "testInsert1v");
             fail("should not be able to insert at pos 1 in empty Map");
         } catch (IndexOutOfBoundsException ex) {}
         try {
-            lom.put(-1, "testInsert-1", "testInsert-1v");
+            lom.put(-1, (K) "testInsert-1", (V) "testInsert-1v");
             fail("should not be able to insert at pos -1 in empty Map");
         } catch (IndexOutOfBoundsException ex) {}
-        
+
         // put where key doesn't exist
-        lom.put(0, "testInsert1", "testInsert1v");
+        lom.put(0, (K) "testInsert1", (V) "testInsert1v");
         assertEquals("testInsert1v", lom.getValue(0));
-        
-        lom.put("testInsertPut", "testInsertPutv");
+
+        lom.put((K) "testInsertPut", (V) "testInsertPutv");
         assertEquals("testInsert1v", lom.getValue(0));
         assertEquals("testInsertPutv", lom.getValue(1));
-        
-        lom.put(0, "testInsert0", "testInsert0v");
+
+        lom.put(0, (K) "testInsert0", (V) "testInsert0v");
         assertEquals("testInsert0v", lom.getValue(0));
         assertEquals("testInsert1v", lom.getValue(1));
         assertEquals("testInsertPutv", lom.getValue(2));
-        
-        lom.put(3, "testInsert3", "testInsert3v");
+
+        lom.put(3, (K) "testInsert3", (V) "testInsert3v");
         assertEquals("testInsert0v", lom.getValue(0));
         assertEquals("testInsert1v", lom.getValue(1));
         assertEquals("testInsertPutv", lom.getValue(2));
         assertEquals("testInsert3v", lom.getValue(3));
-        
-        // put in a full map        
+
+        // put in a full map
         resetFull();
-        lom = (ListOrderedMap) map;
-        ListOrderedMap lom2 = new ListOrderedMap();
+        lom = getMap();
+        ListOrderedMap<K, V> lom2 = new ListOrderedMap<K, V>();
         lom2.putAll(lom);
-        
-        lom2.put(0, "testInsert0", "testInsert0v");
+
+        lom2.put(0, (K) "testInsert0", (V) "testInsert0v");
         assertEquals("testInsert0v", lom2.getValue(0));
         for (int i = 0; i < lom.size(); i++) {
             assertEquals(lom2.getValue(i + 1), lom.getValue(i));
         }
-        
+
         // put where key does exist
         Integer i1 = new Integer(1);
         Integer i1b = new Integer(1);
         Integer i2 = new Integer(2);
         Integer i3 = new Integer(3);
-        
+
         resetEmpty();
-        lom = (ListOrderedMap) map;
-        lom.put(i1, "1");
-        lom.put(i2, "2");
-        lom.put(i3, "3");
-        lom.put(0, i1, "One");
+        lom = getMap();
+        lom.put((K) i1, (V) "1");
+        lom.put((K) i2, (V) "2");
+        lom.put((K) i3, (V) "3");
+        lom.put(0, (K) i1, (V) "One");
         assertEquals(3, lom.size());
         assertEquals(3, lom.map.size());
         assertEquals(3, lom.insertOrder.size());
         assertEquals("One", lom.getValue(0));
         assertSame(i1, lom.get(0));
-        
+
         resetEmpty();
-        lom = (ListOrderedMap) map;
-        lom.put(i1, "1");
-        lom.put(i2, "2");
-        lom.put(i3, "3");
-        lom.put(0, i1b, "One");
+        lom = getMap();
+        lom.put((K) i1, (V) "1");
+        lom.put((K) i2, (V) "2");
+        lom.put((K) i3, (V) "3");
+        lom.put(0, (K) i1b, (V) "One");
         assertEquals(3, lom.size());
         assertEquals(3, lom.map.size());
         assertEquals(3, lom.insertOrder.size());
@@ -259,39 +268,39 @@ public class TestListOrderedMap extends AbstractTestOrderedMap {
         assertEquals("2", lom.getValue(1));
         assertEquals("3", lom.getValue(2));
         assertSame(i1b, lom.get(0));
-        
+
         resetEmpty();
-        lom = (ListOrderedMap) map;
-        lom.put(i1, "1");
-        lom.put(i2, "2");
-        lom.put(i3, "3");
-        lom.put(1, i1b, "One");
+        lom = getMap();
+        lom.put((K) i1, (V) "1");
+        lom.put((K) i2, (V) "2");
+        lom.put((K) i3, (V) "3");
+        lom.put(1, (K) i1b, (V) "One");
         assertEquals(3, lom.size());
         assertEquals(3, lom.map.size());
         assertEquals(3, lom.insertOrder.size());
         assertEquals("One", lom.getValue(0));
         assertEquals("2", lom.getValue(1));
         assertEquals("3", lom.getValue(2));
-        
+
         resetEmpty();
-        lom = (ListOrderedMap) map;
-        lom.put(i1, "1");
-        lom.put(i2, "2");
-        lom.put(i3, "3");
-        lom.put(2, i1b, "One");
+        lom = getMap();
+        lom.put((K) i1, (V) "1");
+        lom.put((K) i2, (V) "2");
+        lom.put((K) i3, (V) "3");
+        lom.put(2, (K) i1b, (V) "One");
         assertEquals(3, lom.size());
         assertEquals(3, lom.map.size());
         assertEquals(3, lom.insertOrder.size());
         assertEquals("2", lom.getValue(0));
         assertEquals("One", lom.getValue(1));
         assertEquals("3", lom.getValue(2));
-        
+
         resetEmpty();
-        lom = (ListOrderedMap) map;
-        lom.put(i1, "1");
-        lom.put(i2, "2");
-        lom.put(i3, "3");
-        lom.put(3, i1b, "One");
+        lom = getMap();
+        lom.put((K) i1, (V) "1");
+        lom.put((K) i2, (V) "2");
+        lom.put((K) i3, (V) "3");
+        lom.put(3, (K) i1b, (V) "One");
         assertEquals(3, lom.size());
         assertEquals(3, lom.map.size());
         assertEquals(3, lom.insertOrder.size());
@@ -303,20 +312,21 @@ public class TestListOrderedMap extends AbstractTestOrderedMap {
     //-----------------------------------------------------------------------
     public void testValueList_getByIndex() {
         resetFull();
-        ListOrderedMap lom = (ListOrderedMap) map;
+        ListOrderedMap<K, V> lom = getMap();
         for (int i = 0; i < lom.size(); i++) {
-            Object expected = lom.getValue(i);
+            V expected = lom.getValue(i);
             assertEquals(expected, lom.valueList().get(i));
         }
     }
 
+    @SuppressWarnings("unchecked")
     public void testValueList_setByIndex() {
         resetFull();
-        ListOrderedMap lom = (ListOrderedMap) map;
+        ListOrderedMap<K, V> lom = getMap();
         for (int i = 0; i < lom.size(); i++) {
             Object input = new Integer(i);
-            Object expected = lom.getValue(i);
-            assertEquals(expected, lom.valueList().set(i, input));
+            V expected = lom.getValue(i);
+            assertEquals(expected, lom.valueList().set(i, (V) input));
             assertEquals(input, lom.getValue(i));
             assertEquals(input, lom.valueList().get(i));
         }
@@ -324,9 +334,9 @@ public class TestListOrderedMap extends AbstractTestOrderedMap {
 
     public void testValueList_removeByIndex() {
         resetFull();
-        ListOrderedMap lom = (ListOrderedMap) map;
+        ListOrderedMap<K, V> lom = getMap();
         while (lom.size() > 1) {
-            Object expected = lom.getValue(1);
+            V expected = lom.getValue(1);
             assertEquals(expected, lom.valueList().remove(1));
         }
     }
@@ -341,19 +351,19 @@ public class TestListOrderedMap extends AbstractTestOrderedMap {
     }
 
     //-----------------------------------------------------------------------
-    public class TestKeyListView extends AbstractTestList {
+    public class TestKeyListView extends AbstractTestList<K> {
         TestKeyListView() {
             super("TestKeyListView");
         }
 
-        public List makeEmptyList() {
-            return ((ListOrderedMap) TestListOrderedMap.this.makeEmptyMap()).keyList();
+        public List<K> makeObject() {
+            return TestListOrderedMap.this.makeObject().keyList();
         }
-        public List makeFullList() {
-            return ((ListOrderedMap) TestListOrderedMap.this.makeFullMap()).keyList();
+        public List<K> makeFullCollection() {
+            return TestListOrderedMap.this.makeFullMap().keyList();
         }
 
-        public Object[] getFullElements() {
+        public K[] getFullElements() {
             return TestListOrderedMap.this.getSampleKeys();
         }
         public boolean isAddSupported() {
@@ -374,19 +384,19 @@ public class TestListOrderedMap extends AbstractTestOrderedMap {
     }
 
     //-----------------------------------------------------------------------
-    public class TestValueListView extends AbstractTestList {
+    public class TestValueListView extends AbstractTestList<V> {
         TestValueListView() {
             super("TestValueListView");
         }
 
-        public List makeEmptyList() {
-            return ((ListOrderedMap) TestListOrderedMap.this.makeEmptyMap()).valueList();
+        public List<V> makeObject() {
+            return TestListOrderedMap.this.makeObject().valueList();
         }
-        public List makeFullList() {
-            return ((ListOrderedMap) TestListOrderedMap.this.makeFullMap()).valueList();
+        public List<V> makeFullCollection() {
+            return TestListOrderedMap.this.makeFullMap().valueList();
         }
 
-        public Object[] getFullElements() {
+        public V[] getFullElements() {
             return TestListOrderedMap.this.getSampleValues();
         }
         public boolean isAddSupported() {
@@ -421,4 +431,12 @@ public class TestListOrderedMap extends AbstractTestOrderedMap {
 //            (java.io.Serializable) map,
 //            "D:/dev/collections/data/test/ListOrderedMap.fullCollection.version3.1.obj");
 //    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public ListOrderedMap<K, V> getMap() {
+        return (ListOrderedMap<K, V>) super.getMap();
+    }
 }

http://git-wip-us.apache.org/repos/asf/commons-collections/blob/884baf0d/src/test/org/apache/commons/collections/map/TestListOrderedMap2.java
----------------------------------------------------------------------
diff --git a/src/test/org/apache/commons/collections/map/TestListOrderedMap2.java b/src/test/org/apache/commons/collections/map/TestListOrderedMap2.java
index c7e0bb6..a45fa76 100644
--- a/src/test/org/apache/commons/collections/map/TestListOrderedMap2.java
+++ b/src/test/org/apache/commons/collections/map/TestListOrderedMap2.java
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -18,7 +18,6 @@ package org.apache.commons.collections.map;
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
 
 import junit.framework.Test;
 
@@ -32,11 +31,11 @@ import org.apache.commons.collections.list.AbstractTestList;
  *
  * @since Commons Collections 3.1
  * @version $Revision$ $Date$
- * 
+ *
  * @author Henri Yandell
  * @author Stephen Colebourne
  */
-public class TestListOrderedMap2 extends AbstractTestOrderedMap {
+public class TestListOrderedMap2<K, V> extends AbstractTestOrderedMap<K, V> {
 
     public TestListOrderedMap2(String testName) {
         super(testName);
@@ -51,57 +50,65 @@ public class TestListOrderedMap2 extends AbstractTestOrderedMap {
         junit.textui.TestRunner.main(testCaseName);
     }
 
-    public Map makeEmptyMap() {
-        return new ListOrderedMap();
+    public ListOrderedMap<K, V> makeObject() {
+        return new ListOrderedMap<K, V>();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public ListOrderedMap<K, V> makeFullMap() {
+        return (ListOrderedMap<K, V>) super.makeFullMap();
     }
-    
+
     //-----------------------------------------------------------------------
     public void testGetByIndex() {
         resetEmpty();
-        ListOrderedMap lom = (ListOrderedMap) map;
+        ListOrderedMap<K, V> lom = getMap();
         try {
             lom.get(0);
         } catch (IndexOutOfBoundsException ex) {}
         try {
             lom.get(-1);
         } catch (IndexOutOfBoundsException ex) {}
-        
+
         resetFull();
-        lom = (ListOrderedMap) map;
+        lom = getMap();
         try {
             lom.get(-1);
         } catch (IndexOutOfBoundsException ex) {}
         try {
             lom.get(lom.size());
         } catch (IndexOutOfBoundsException ex) {}
-        
+
         int i = 0;
-        for (MapIterator it = lom.mapIterator(); it.hasNext(); i++) {
+        for (MapIterator<K, V> it = lom.mapIterator(); it.hasNext(); i++) {
             assertSame(it.next(), lom.get(i));
         }
     }
 
     public void testGetValueByIndex() {
         resetEmpty();
-        ListOrderedMap lom = (ListOrderedMap) map;
+        ListOrderedMap<K, V> lom = getMap();
         try {
             lom.getValue(0);
         } catch (IndexOutOfBoundsException ex) {}
         try {
             lom.getValue(-1);
         } catch (IndexOutOfBoundsException ex) {}
-        
+
         resetFull();
-        lom = (ListOrderedMap) map;
+        lom = getMap();
         try {
             lom.getValue(-1);
         } catch (IndexOutOfBoundsException ex) {}
         try {
             lom.getValue(lom.size());
         } catch (IndexOutOfBoundsException ex) {}
-        
+
         int i = 0;
-        for (MapIterator it = lom.mapIterator(); it.hasNext(); i++) {
+        for (MapIterator<K, V> it = lom.mapIterator(); it.hasNext(); i++) {
             it.next();
             assertSame(it.getValue(), lom.getValue(i));
         }
@@ -109,13 +116,13 @@ public class TestListOrderedMap2 extends AbstractTestOrderedMap {
 
     public void testIndexOf() {
         resetEmpty();
-        ListOrderedMap lom = (ListOrderedMap) map;
+        ListOrderedMap<K, V> lom = getMap();
         assertEquals(-1, lom.indexOf(getOtherKeys()));
-        
+
         resetFull();
-        lom = (ListOrderedMap) map;
-        List list = new ArrayList();
-        for (MapIterator it = lom.mapIterator(); it.hasNext();) {
+        lom = getMap();
+        List<K> list = new ArrayList<K>();
+        for (MapIterator<K, V> it = lom.mapIterator(); it.hasNext();) {
             list.add(it.next());
         }
         for (int i = 0; i < list.size(); i++) {
@@ -125,25 +132,25 @@ public class TestListOrderedMap2 extends AbstractTestOrderedMap {
 
     public void testRemoveByIndex() {
         resetEmpty();
-        ListOrderedMap lom = (ListOrderedMap) map;
+        ListOrderedMap<K, V> lom = getMap();
         try {
             lom.remove(0);
         } catch (IndexOutOfBoundsException ex) {}
         try {
             lom.remove(-1);
         } catch (IndexOutOfBoundsException ex) {}
-        
+
         resetFull();
-        lom = (ListOrderedMap) map;
+        lom = getMap();
         try {
             lom.remove(-1);
         } catch (IndexOutOfBoundsException ex) {}
         try {
             lom.remove(lom.size());
         } catch (IndexOutOfBoundsException ex) {}
-        
-        List list = new ArrayList();
-        for (MapIterator it = lom.mapIterator(); it.hasNext();) {
+
+        List<K> list = new ArrayList<K>();
+        for (MapIterator<K, V> it = lom.mapIterator(); it.hasNext();) {
             list.add(it.next());
         }
         for (int i = 0; i < list.size(); i++) {
@@ -154,26 +161,26 @@ public class TestListOrderedMap2 extends AbstractTestOrderedMap {
             assertEquals(false, lom.containsKey(key));
         }
     }
-    
+
     public BulkTest bulkTestListView() {
         return new TestListView();
     }
-    
-    public class TestListView extends AbstractTestList {
-        
+
+    public class TestListView extends AbstractTestList<K> {
+
         TestListView() {
             super("TestListView");
         }
 
-        public List makeEmptyList() {
-            return ((ListOrderedMap) TestListOrderedMap2.this.makeEmptyMap()).asList();
+        public List<K> makeObject() {
+            return TestListOrderedMap2.this.makeObject().asList();
         }
-        
-        public List makeFullList() {
-            return ((ListOrderedMap) TestListOrderedMap2.this.makeFullMap()).asList();
+
+        public List<K> makeFullCollection() {
+            return TestListOrderedMap2.this.makeFullMap().asList();
         }
-        
-        public Object[] getFullElements() {
+
+        public K[] getFullElements() {
             return TestListOrderedMap2.this.getSampleKeys();
         }
         public boolean isAddSupported() {
@@ -207,4 +214,13 @@ public class TestListOrderedMap2 extends AbstractTestOrderedMap {
 //            (java.io.Serializable) map,
 //            "D:/dev/collections/data/test/ListOrderedMap.fullCollection.version3.1.obj");
 //    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public ListOrderedMap<K, V> getMap() {
+        // TODO Auto-generated method stub
+        return (ListOrderedMap<K, V>) super.getMap();
+    }
 }

http://git-wip-us.apache.org/repos/asf/commons-collections/blob/884baf0d/src/test/org/apache/commons/collections/map/TestMultiKeyMap.java
----------------------------------------------------------------------
diff --git a/src/test/org/apache/commons/collections/map/TestMultiKeyMap.java b/src/test/org/apache/commons/collections/map/TestMultiKeyMap.java
index 01747e3..b86db2c 100644
--- a/src/test/org/apache/commons/collections/map/TestMultiKeyMap.java
+++ b/src/test/org/apache/commons/collections/map/TestMultiKeyMap.java
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -27,13 +27,13 @@ import org.apache.commons.collections.keyvalue.MultiKey;
 
 /**
  * JUnit tests.
- * 
+ *
  * @version $Revision$ $Date$
- * 
+ *
  * @author Stephen Colebourne
  */
-public class TestMultiKeyMap extends AbstractTestIterableMap {
-    
+public class TestMultiKeyMap<K, V> extends AbstractTestIterableMap<MultiKey<? extends K>, V> {
+
     static final Integer I1 = new Integer(1);
     static final Integer I2 = new Integer(2);
     static final Integer I3 = new Integer(3);
@@ -55,15 +55,16 @@ public class TestMultiKeyMap extends AbstractTestIterableMap {
         return BulkTest.makeSuite(TestMultiKeyMap.class);
     }
 
-    public Map makeEmptyMap() {
-        return new MultiKeyMap();
+    public MultiKeyMap<K, V> makeObject() {
+        return new MultiKeyMap<K, V>();
     }
 
-    public Object[] getSampleKeys() {
+    public MultiKey<K>[] getSampleKeys() {
         return getMultiKeyKeys();
     }
 
-    private MultiKey[] getMultiKeyKeys() {
+    @SuppressWarnings("unchecked")
+    private MultiKey<K>[] getMultiKeyKeys() {
         return new MultiKey[] {
             new MultiKey(I1, I2),
             new MultiKey(I2, I3),
@@ -80,8 +81,9 @@ public class TestMultiKeyMap extends AbstractTestIterableMap {
         };
     }
 
-    public Object[] getSampleValues() {
-        return new Object[] {
+    @SuppressWarnings("unchecked")
+    public V[] getSampleValues() {
+        return (V[]) new Object[] {
             "2A", "2B", "2C",
             "3D", "3E", "3F",
             "4G", "4H", "4I",
@@ -89,8 +91,9 @@ public class TestMultiKeyMap extends AbstractTestIterableMap {
         };
     }
 
-    public Object[] getNewSampleValues() {
-        return new Object[] {
+    @SuppressWarnings("unchecked")
+    public V[] getNewSampleValues() {
+        return (V[]) new Object[] {
             "1a", "1b", "1c",
             "2d", "2e", "2f",
             "3g", "3h", "3i",
@@ -98,20 +101,22 @@ public class TestMultiKeyMap extends AbstractTestIterableMap {
         };
     }
 
-    public Object[] getOtherKeys() {
-        return new Object[] {
+    @SuppressWarnings("unchecked")
+    public MultiKey<K>[] getOtherKeys() {
+        return (MultiKey<K>[]) new MultiKey[] {
             new MultiKey(I1, I7),
             new MultiKey(I1, I8),
             new MultiKey(I2, I4),
             new MultiKey(I2, I5),
         };
     }
-    
+
     public boolean isAllowNullKey() {
         return false;
     }
 
     //-----------------------------------------------------------------------
+    @SuppressWarnings("unchecked")
     public void testNullHandling() {
         resetFull();
         assertEquals(null, map.get(null));
@@ -125,9 +130,9 @@ public class TestMultiKeyMap extends AbstractTestIterableMap {
             map.put(null, null);
             fail();
         } catch (NullPointerException ex) {}
-        assertEquals(null, map.put(new MultiKey(null, null), null));
+        assertEquals(null, map.put(new MultiKey<K>(null, null), null));
         try {
-            map.put(null, new Object());
+            map.put(null, (V) new Object());
             fail();
         } catch (NullPointerException ex) {}
     }
@@ -135,14 +140,14 @@ public class TestMultiKeyMap extends AbstractTestIterableMap {
     //-----------------------------------------------------------------------
     public void testMultiKeyGet() {
         resetFull();
-        MultiKeyMap multimap = (MultiKeyMap) map;
-        MultiKey[] keys = getMultiKeyKeys();
-        Object[] values = getSampleValues();
-        
+        MultiKeyMap<K, V> multimap = getMap();
+        MultiKey<K>[] keys = getMultiKeyKeys();
+        V[] values = getSampleValues();
+
         for (int i = 0; i < keys.length; i++) {
-            MultiKey key = keys[i];
-            Object value = values[i];
-            
+            MultiKey<K> key = keys[i];
+            V value = values[i];
+
             switch (key.size()) {
                 case 2:
                 assertEquals(value, multimap.get(key.getKey(0), key.getKey(1)));
@@ -185,17 +190,15 @@ public class TestMultiKeyMap extends AbstractTestIterableMap {
             }
         }
     }
-    
+
     public void testMultiKeyContainsKey() {
         resetFull();
-        MultiKeyMap multimap = (MultiKeyMap) map;
-        MultiKey[] keys = getMultiKeyKeys();
-        Object[] values = getSampleValues();
-        
+        MultiKeyMap<K, V> multimap = getMap();
+        MultiKey<K>[] keys = getMultiKeyKeys();
+
         for (int i = 0; i < keys.length; i++) {
-            MultiKey key = keys[i];
-            Object value = values[i];
-            
+            MultiKey<K> key = keys[i];
+
             switch (key.size()) {
                 case 2:
                 assertEquals(true, multimap.containsKey(key.getKey(0), key.getKey(1)));
@@ -238,24 +241,24 @@ public class TestMultiKeyMap extends AbstractTestIterableMap {
             }
         }
     }
-    
+
     public void testMultiKeyPut() {
-        MultiKey[] keys = getMultiKeyKeys();
-        Object[] values = getSampleValues();
-        
+        MultiKey<K>[] keys = getMultiKeyKeys();
+        V[] values = getSampleValues();
+
         for (int i = 0; i < keys.length; i++) {
-            MultiKeyMap multimap = new MultiKeyMap();
-            
-            MultiKey key = keys[i];
-            Object value = values[i];
-            
+            MultiKeyMap<K, V> multimap = new MultiKeyMap<K, V>();
+
+            MultiKey<K> key = keys[i];
+            V value = values[i];
+
             switch (key.size()) {
                 case 2:
                 assertEquals(null, multimap.put(key.getKey(0), key.getKey(1), value));
                 assertEquals(1, multimap.size());
                 assertEquals(value, multimap.get(key.getKey(0), key.getKey(1)));
                 assertEquals(true, multimap.containsKey(key.getKey(0), key.getKey(1)));
-                assertEquals(true, multimap.containsKey(new MultiKey(key.getKey(0), key.getKey(1))));
+                assertEquals(true, multimap.containsKey(new MultiKey<K>(key.getKey(0), key.getKey(1))));
                 assertEquals(value, multimap.put(key.getKey(0), key.getKey(1), null));
                 assertEquals(1, multimap.size());
                 assertEquals(null, multimap.get(key.getKey(0), key.getKey(1)));
@@ -266,7 +269,7 @@ public class TestMultiKeyMap extends AbstractTestIterableMap {
                 assertEquals(1, multimap.size());
                 assertEquals(value, multimap.get(key.getKey(0), key.getKey(1), key.getKey(2)));
                 assertEquals(true, multimap.containsKey(key.getKey(0), key.getKey(1), key.getKey(2)));
-                assertEquals(true, multimap.containsKey(new MultiKey(key.getKey(0), key.getKey(1), key.getKey(2))));
+                assertEquals(true, multimap.containsKey(new MultiKey<K>(key.getKey(0), key.getKey(1), key.getKey(2))));
                 assertEquals(value, multimap.put(key.getKey(0), key.getKey(1), key.getKey(2), null));
                 assertEquals(1, multimap.size());
                 assertEquals(null, multimap.get(key.getKey(0), key.getKey(1), key.getKey(2)));
@@ -277,7 +280,7 @@ public class TestMultiKeyMap extends AbstractTestIterableMap {
                 assertEquals(1, multimap.size());
                 assertEquals(value, multimap.get(key.getKey(0), key.getKey(1), key.getKey(2), key.getKey(3)));
                 assertEquals(true, multimap.containsKey(key.getKey(0), key.getKey(1), key.getKey(2), key.getKey(3)));
-                assertEquals(true, multimap.containsKey(new MultiKey(key.getKey(0), key.getKey(1), key.getKey(2), key.getKey(3))));
+                assertEquals(true, multimap.containsKey(new MultiKey<K>(key.getKey(0), key.getKey(1), key.getKey(2), key.getKey(3))));
                 assertEquals(value, multimap.put(key.getKey(0), key.getKey(1), key.getKey(2), key.getKey(3), null));
                 assertEquals(1, multimap.size());
                 assertEquals(null, multimap.get(key.getKey(0), key.getKey(1), key.getKey(2), key.getKey(3)));
@@ -288,7 +291,7 @@ public class TestMultiKeyMap extends AbstractTestIterableMap {
                 assertEquals(1, multimap.size());
                 assertEquals(value, multimap.get(key.getKey(0), key.getKey(1), key.getKey(2), key.getKey(3), key.getKey(4)));
                 assertEquals(true, multimap.containsKey(key.getKey(0), key.getKey(1), key.getKey(2), key.getKey(3), key.getKey(4)));
-                assertEquals(true, multimap.containsKey(new MultiKey(key.getKey(0), key.getKey(1), key.getKey(2), key.getKey(3), key.getKey(4))));
+                assertEquals(true, multimap.containsKey(new MultiKey<K>(key.getKey(0), key.getKey(1), key.getKey(2), key.getKey(3), key.getKey(4))));
                 assertEquals(value, multimap.put(key.getKey(0), key.getKey(1), key.getKey(2), key.getKey(3), key.getKey(4), null));
                 assertEquals(1, multimap.size());
                 assertEquals(null, multimap.get(key.getKey(0), key.getKey(1), key.getKey(2), key.getKey(3), key.getKey(4)));
@@ -299,19 +302,19 @@ public class TestMultiKeyMap extends AbstractTestIterableMap {
             }
         }
     }
-    
+
     public void testMultiKeyRemove() {
-        MultiKey[] keys = getMultiKeyKeys();
-        Object[] values = getSampleValues();
-        
+        MultiKey<K>[] keys = getMultiKeyKeys();
+        V[] values = getSampleValues();
+
         for (int i = 0; i < keys.length; i++) {
             resetFull();
-            MultiKeyMap multimap = (MultiKeyMap) map;
+            MultiKeyMap<K, V> multimap = getMap();
             int size = multimap.size();
-            
-            MultiKey key = keys[i];
-            Object value = values[i];
-            
+
+            MultiKey<K> key = keys[i];
+            V value = values[i];
+
             switch (key.size()) {
                 case 2:
                 assertEquals(true, multimap.containsKey(key.getKey(0), key.getKey(1)));
@@ -350,86 +353,88 @@ public class TestMultiKeyMap extends AbstractTestIterableMap {
             }
         }
     }
-    
+
     public void testMultiKeyRemoveAll1() {
         resetFull();
-        MultiKeyMap multimap = (MultiKeyMap) map;
+        MultiKeyMap<K, V> multimap = getMap();
         assertEquals(12, multimap.size());
-        
+
         multimap.removeAll(I1);
         assertEquals(8, multimap.size());
-        for (MapIterator it = multimap.mapIterator(); it.hasNext();) {
-            MultiKey key = (MultiKey) it.next();
+        for (MapIterator<MultiKey<? extends K>, V> it = multimap.mapIterator(); it.hasNext();) {
+            MultiKey<? extends K> key = it.next();
             assertEquals(false, I1.equals(key.getKey(0)));
         }
     }
-    
+
     public void testMultiKeyRemoveAll2() {
         resetFull();
-        MultiKeyMap multimap = (MultiKeyMap) map;
+        MultiKeyMap<K, V> multimap = getMap();
         assertEquals(12, multimap.size());
-        
+
         multimap.removeAll(I2, I3);
         assertEquals(9, multimap.size());
-        for (MapIterator it = multimap.mapIterator(); it.hasNext();) {
-            MultiKey key = (MultiKey) it.next();
+        for (MapIterator<MultiKey<? extends K>, V> it = multimap.mapIterator(); it.hasNext();) {
+            MultiKey<? extends K> key = it.next();
             assertEquals(false, I2.equals(key.getKey(0)) && I3.equals(key.getKey(1)));
         }
     }
-    
+
     public void testMultiKeyRemoveAll3() {
         resetFull();
-        MultiKeyMap multimap = (MultiKeyMap) map;
+        MultiKeyMap<K, V> multimap = getMap();
         assertEquals(12, multimap.size());
-        
+
         multimap.removeAll(I1, I1, I2);
         assertEquals(9, multimap.size());
-        for (MapIterator it = multimap.mapIterator(); it.hasNext();) {
-            MultiKey key = (MultiKey) it.next();
+        for (MapIterator<MultiKey<? extends K>, V> it = multimap.mapIterator(); it.hasNext();) {
+            MultiKey<? extends K> key = it.next();
             assertEquals(false, I1.equals(key.getKey(0)) && I1.equals(key.getKey(1)) && I2.equals(key.getKey(2)));
         }
     }
-    
+
     public void testMultiKeyRemoveAll4() {
         resetFull();
-        MultiKeyMap multimap = (MultiKeyMap) map;
+        MultiKeyMap<K, V> multimap = getMap();
         assertEquals(12, multimap.size());
-        
+
         multimap.removeAll(I1, I1, I2, I3);
         assertEquals(10, multimap.size());
-        for (MapIterator it = multimap.mapIterator(); it.hasNext();) {
-            MultiKey key = (MultiKey) it.next();
+        for (MapIterator<MultiKey<? extends K>, V> it = multimap.mapIterator(); it.hasNext();) {
+            MultiKey<? extends K> key = it.next();
             assertEquals(false, I1.equals(key.getKey(0)) && I1.equals(key.getKey(1)) && I2.equals(key.getKey(2)) && key.size() >= 4 && I3.equals(key.getKey(3)));
         }
     }
-    
+
     //-----------------------------------------------------------------------
+    @SuppressWarnings("unchecked")
     public void testClone() {
-        MultiKeyMap map = new MultiKeyMap();
-        map.put(new MultiKey(I1, I2), "1-2");
-        Map cloned = (Map) map.clone();
+        MultiKeyMap<K, V> map = new MultiKeyMap<K, V>();
+        map.put(new MultiKey<K>((K) I1, (K) I2), (V) "1-2");
+        Map<MultiKey<? extends K>, V> cloned = map.clone();
         assertEquals(map.size(), cloned.size());
-        assertSame(map.get(new MultiKey(I1, I2)), cloned.get(new MultiKey(I1, I2)));
+        assertSame(map.get(new MultiKey<K>((K) I1, (K) I2)), cloned.get(new MultiKey<K>((K) I1, (K) I2)));
     }
 
     //-----------------------------------------------------------------------
+    @SuppressWarnings("unchecked")
     public void testLRUMultiKeyMap() {
-        MultiKeyMap map = MultiKeyMap.decorate(new LRUMap(2));
-        map.put(I1, I2, "1-2");
-        map.put(I1, I3, "1-3");
+        MultiKeyMap<K, V> map = MultiKeyMap.decorate(new LRUMap<MultiKey<? extends K>, V>(2));
+        map.put((K) I1, (K) I2, (V) "1-2");
+        map.put((K) I1, (K) I3, (V) "1-1");
         assertEquals(2, map.size());
-        map.put(I1, I4, "1-4");
+        map.put((K) I1, (K) I4, (V) "1-4");
         assertEquals(2, map.size());
         assertEquals(true, map.containsKey(I1, I3));
         assertEquals(true, map.containsKey(I1, I4));
         assertEquals(false, map.containsKey(I1, I2));
-        
-        MultiKeyMap cloned = (MultiKeyMap) map.clone();
+
+        MultiKeyMap<K, V> cloned = map.clone();
         assertEquals(2, map.size());
         assertEquals(true, cloned.containsKey(I1, I3));
         assertEquals(true, cloned.containsKey(I1, I4));
         assertEquals(false, cloned.containsKey(I1, I2));
-        cloned.put(I1, I5, "1-5");
+        cloned.put((K) I1, (K) I5, (V) "1-5");
         assertEquals(2, cloned.size());
         assertEquals(true, cloned.containsKey(I1, I4));
         assertEquals(true, cloned.containsKey(I1, I5));
@@ -450,4 +455,12 @@ public class TestMultiKeyMap extends AbstractTestIterableMap {
 //            (java.io.Serializable) map,
 //            "D:/dev/collections/data/test/MultiKeyMap.fullCollection.version3.1.obj");
 //    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public MultiKeyMap<K, V> getMap() {
+        return (MultiKeyMap<K, V>) super.getMap();
+    }
 }

http://git-wip-us.apache.org/repos/asf/commons-collections/blob/884baf0d/src/test/org/apache/commons/collections/map/TestMultiValueMap.java
----------------------------------------------------------------------
diff --git a/src/test/org/apache/commons/collections/map/TestMultiValueMap.java b/src/test/org/apache/commons/collections/map/TestMultiValueMap.java
index bd25c44..cf85ddf 100644
--- a/src/test/org/apache/commons/collections/map/TestMultiValueMap.java
+++ b/src/test/org/apache/commons/collections/map/TestMultiValueMap.java
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -39,7 +39,7 @@ import org.apache.commons.collections.MultiMap;
  * @author Stephen Colebourne
  * @since Commons Collections 3.2
  */
-public class TestMultiValueMap extends TestCase {
+public class TestMultiValueMap<K, V> extends TestCase {
 
     public TestMultiValueMap(String testName) {
         super(testName);
@@ -55,25 +55,28 @@ public class TestMultiValueMap extends TestCase {
     }
 
     public void testNoMappingReturnsNull() {
-        final MultiValueMap map = createTestMap();
+        final MultiValueMap<K, V> map = createTestMap();
         assertNull(map.get("whatever"));
     }
 
+    @SuppressWarnings("unchecked")
     public void testValueCollectionType() {
-        final MultiValueMap map = createTestMap(LinkedList.class);
+        final MultiValueMap<K, V> map = createTestMap(LinkedList.class);
         assertTrue(map.get("one") instanceof LinkedList);
     }
 
+    @SuppressWarnings("unchecked")
     public void testMultipleValues() {
-        final MultiValueMap map = createTestMap(HashSet.class);
-        final HashSet expected = new HashSet();
-        expected.add("uno");
-        expected.add("un");
+        final MultiValueMap<K, V> map = createTestMap(HashSet.class);
+        final HashSet<V> expected = new HashSet<V>();
+        expected.add((V) "uno");
+        expected.add((V) "un");
         assertEquals(expected, map.get("one"));
     }
 
+    @SuppressWarnings("unchecked")
     public void testContainsValue() {
-        final MultiValueMap map = createTestMap(HashSet.class);
+        final MultiValueMap<K, V> map = createTestMap(HashSet.class);
         assertTrue(map.containsValue("uno"));
         assertTrue(map.containsValue("un"));
         assertTrue(map.containsValue("dos"));
@@ -83,56 +86,60 @@ public class TestMultiValueMap extends TestCase {
         assertFalse(map.containsValue("quatro"));
     }
 
+    @SuppressWarnings("unchecked")
     public void testKeyContainsValue() {
-        final MultiValueMap map = createTestMap(HashSet.class);
-        assertTrue(map.containsValue("one", "uno"));
-        assertTrue(map.containsValue("one", "un"));
-        assertTrue(map.containsValue("two", "dos"));
-        assertTrue(map.containsValue("two", "deux"));
-        assertTrue(map.containsValue("three", "tres"));
-        assertTrue(map.containsValue("three", "trois"));
-        assertFalse(map.containsValue("four", "quatro"));
+        final MultiValueMap<K, V> map = createTestMap(HashSet.class);
+        assertTrue(map.containsValue((K) "one", "uno"));
+        assertTrue(map.containsValue((K) "one", "un"));
+        assertTrue(map.containsValue((K) "two", "dos"));
+        assertTrue(map.containsValue((K) "two", "deux"));
+        assertTrue(map.containsValue((K) "three", "tres"));
+        assertTrue(map.containsValue((K) "three", "trois"));
+        assertFalse(map.containsValue((K) "four", "quatro"));
     }
 
+    @SuppressWarnings("unchecked")
     public void testValues() {
-        final MultiValueMap map = createTestMap(HashSet.class);
-        final HashSet expected = new HashSet();
-        expected.add("uno");
-        expected.add("dos");
-        expected.add("tres");
-        expected.add("un");
-        expected.add("deux");
-        expected.add("trois");
-        final Collection c = map.values();
+        final MultiValueMap<K, V> map = createTestMap(HashSet.class);
+        final HashSet<V> expected = new HashSet<V>();
+        expected.add((V) "uno");
+        expected.add((V) "dos");
+        expected.add((V) "tres");
+        expected.add((V) "un");
+        expected.add((V) "deux");
+        expected.add((V) "trois");
+        final Collection<Object> c = map.values();
         assertEquals(6, c.size());
-        assertEquals(expected, new HashSet(c));
+        assertEquals(expected, new HashSet<Object>(c));
     }
 
-    private MultiValueMap createTestMap() {
+    @SuppressWarnings("unchecked")
+    private MultiValueMap<K, V> createTestMap() {
         return createTestMap(ArrayList.class);
     }
 
-    private MultiValueMap createTestMap(Class collectionClass) {
-        final MultiValueMap map = MultiValueMap.decorate(new HashMap(), collectionClass);
-        map.put("one", "uno");
-        map.put("one", "un");
-        map.put("two", "dos");
-        map.put("two", "deux");
-        map.put("three", "tres");
-        map.put("three", "trois");
+    @SuppressWarnings("unchecked")
+    private <C extends Collection<V>> MultiValueMap<K, V> createTestMap(Class<C> collectionClass) {
+        final MultiValueMap<K, V> map = MultiValueMap.decorate(new HashMap<K, C>(), collectionClass);
+        map.put((K) "one", (V) "uno");
+        map.put((K) "one", (V) "un");
+        map.put((K) "two", (V) "dos");
+        map.put((K) "two", (V) "deux");
+        map.put((K) "three", (V) "tres");
+        map.put((K) "three", (V) "trois");
         return map;
     }
 
     public void testKeyedIterator() {
-        final MultiValueMap map = createTestMap();
-        final ArrayList actual = new ArrayList(IteratorUtils.toList(map.iterator("one")));
-        final ArrayList expected = new ArrayList(Arrays.asList(new String[]{"uno", "un"}));
+        final MultiValueMap<K, V> map = createTestMap();
+        final ArrayList<Object> actual = new ArrayList<Object>(IteratorUtils.toList(map.iterator("one")));
+        final ArrayList<Object> expected = new ArrayList<Object>(Arrays.asList(new String[]{ "uno", "un" }));
         assertEquals(expected, actual);
     }
 
     public void testRemoveAllViaIterator() {
-        final MultiValueMap map = createTestMap();
-        for(Iterator i = map.values().iterator(); i.hasNext();) {
+        final MultiValueMap<K, V> map = createTestMap();
+        for (Iterator<?> i = map.values().iterator(); i.hasNext();) {
             i.next();
             i.remove();
         }
@@ -141,8 +148,8 @@ public class TestMultiValueMap extends TestCase {
     }
 
     public void testRemoveAllViaKeyedIterator() {
-        final MultiValueMap map = createTestMap();
-        for(Iterator i = map.iterator("one"); i.hasNext();) {
+        final MultiValueMap<K, V> map = createTestMap();
+        for (Iterator<?> i = map.iterator("one"); i.hasNext();) {
             i.next();
             i.remove();
         }
@@ -155,71 +162,76 @@ public class TestMultiValueMap extends TestCase {
     }
 
     //-----------------------------------------------------------------------
+    @SuppressWarnings("unchecked")
     public void testMapEquals() {
-        MultiValueMap one = new MultiValueMap();
+        MultiValueMap<K, V> one = new MultiValueMap<K, V>();
         Integer value = new Integer(1);
-        one.put("One", value);
+        one.put((K) "One", value);
         one.remove("One", value);
-        
-        MultiValueMap two = new MultiValueMap();
+
+        MultiValueMap<K, V> two = new MultiValueMap<K, V>();
         assertEquals(two, one);
     }
 
     //-----------------------------------------------------------------------
+    @SuppressWarnings("unchecked")
     public void testGetCollection() {
-        MultiValueMap map = new MultiValueMap();
-        map.put("A", "AA");
+        MultiValueMap<K, V> map = new MultiValueMap<K, V>();
+        map.put((K) "A", "AA");
         assertSame(map.get("A"), map.getCollection("A"));
     }
-    
+
+    @SuppressWarnings("unchecked")
     public void testTotalSize() {
-        MultiValueMap map = new MultiValueMap();
+        MultiValueMap<K, V> map = new MultiValueMap<K, V>();
         assertEquals(0, map.totalSize());
-        map.put("A", "AA");
+        map.put((K) "A", "AA");
         assertEquals(1, map.totalSize());
-        map.put("B", "BA");
+        map.put((K) "B", "BA");
         assertEquals(2, map.totalSize());
-        map.put("B", "BB");
+        map.put((K) "B", "BB");
         assertEquals(3, map.totalSize());
-        map.put("B", "BC");
+        map.put((K) "B", "BC");
         assertEquals(4, map.totalSize());
         map.remove("A");
         assertEquals(3, map.totalSize());
         map.remove("B", "BC");
         assertEquals(2, map.totalSize());
     }
-    
+
+    @SuppressWarnings("unchecked")
     public void testSize() {
-        MultiValueMap map = new MultiValueMap();
+        MultiValueMap<K, V> map = new MultiValueMap<K, V>();
         assertEquals(0, map.size());
-        map.put("A", "AA");
+        map.put((K) "A", "AA");
         assertEquals(1, map.size());
-        map.put("B", "BA");
+        map.put((K) "B", "BA");
         assertEquals(2, map.size());
-        map.put("B", "BB");
+        map.put((K) "B", "BB");
         assertEquals(2, map.size());
-        map.put("B", "BC");
+        map.put((K) "B", "BC");
         assertEquals(2, map.size());
         map.remove("A");
         assertEquals(1, map.size());
         map.remove("B", "BC");
         assertEquals(1, map.size());
     }
-    
+
+    @SuppressWarnings("unchecked")
     public void testSize_Key() {
-        MultiValueMap map = new MultiValueMap();
+        MultiValueMap<K, V> map = new MultiValueMap<K, V>();
         assertEquals(0, map.size("A"));
         assertEquals(0, map.size("B"));
-        map.put("A", "AA");
+        map.put((K) "A", "AA");
         assertEquals(1, map.size("A"));
         assertEquals(0, map.size("B"));
-        map.put("B", "BA");
+        map.put((K) "B", "BA");
         assertEquals(1, map.size("A"));
         assertEquals(1, map.size("B"));
-        map.put("B", "BB");
+        map.put((K) "B", "BB");
         assertEquals(1, map.size("A"));
         assertEquals(2, map.size("B"));
-        map.put("B", "BC");
+        map.put((K) "B", "BC");
         assertEquals(1, map.size("A"));
         assertEquals(3, map.size("B"));
         map.remove("A");
@@ -229,53 +241,58 @@ public class TestMultiValueMap extends TestCase {
         assertEquals(0, map.size("A"));
         assertEquals(2, map.size("B"));
     }
-    
+
+    @SuppressWarnings("unchecked")
     public void testIterator_Key() {
-        MultiValueMap map = new MultiValueMap();
+        MultiValueMap<K, V> map = new MultiValueMap<K, V>();
         assertEquals(false, map.iterator("A").hasNext());
-        map.put("A", "AA");
-        Iterator it = map.iterator("A");
+        map.put((K) "A", "AA");
+        Iterator<?> it = map.iterator("A");
         assertEquals(true, it.hasNext());
         it.next();
         assertEquals(false, it.hasNext());
     }
-    
+
+    @SuppressWarnings("unchecked")
     public void testContainsValue_Key() {
-        MultiValueMap map = new MultiValueMap();
+        MultiValueMap<K, V> map = new MultiValueMap<K, V>();
         assertEquals(false, map.containsValue("A", "AA"));
         assertEquals(false, map.containsValue("B", "BB"));
-        map.put("A", "AA");
+        map.put((K) "A", "AA");
         assertEquals(true, map.containsValue("A", "AA"));
         assertEquals(false, map.containsValue("A", "AB"));
     }
 
+    @SuppressWarnings("unchecked")
     public void testPutWithList() {
-        MultiValueMap test = MultiValueMap.decorate(new HashMap(), ArrayList.class);
-        assertEquals("a", test.put("A", "a"));
-        assertEquals("b", test.put("A", "b"));
+        MultiValueMap<K, V> test = MultiValueMap.decorate(new HashMap<K, Collection>(), ArrayList.class);
+        assertEquals("a", test.put((K) "A", "a"));
+        assertEquals("b", test.put((K) "A", "b"));
         assertEquals(1, test.size());
         assertEquals(2, test.size("A"));
         assertEquals(2, test.totalSize());
     }
 
+    @SuppressWarnings("unchecked")
     public void testPutWithSet() {
-        MultiValueMap test = MultiValueMap.decorate(new HashMap(), HashSet.class);
-        assertEquals("a", test.put("A", "a"));
-        assertEquals("b", test.put("A", "b"));
-        assertEquals(null, test.put("A", "a"));
+        MultiValueMap<K, V> test = MultiValueMap.decorate(new HashMap<K, HashSet>(), HashSet.class);
+        assertEquals("a", test.put((K) "A", "a"));
+        assertEquals("b", test.put((K) "A", "b"));
+        assertEquals(null, test.put((K) "A", "a"));
         assertEquals(1, test.size());
         assertEquals(2, test.size("A"));
         assertEquals(2, test.totalSize());
     }
 
+    @SuppressWarnings("unchecked")
     public void testPutAll_Map1() {
-        MultiMap original = new MultiValueMap();
-        original.put("key", "object1");
-        original.put("key", "object2");
+        MultiMap<K, V> original = new MultiValueMap<K, V>();
+        original.put((K) "key", "object1");
+        original.put((K) "key", "object2");
 
-        MultiValueMap test = new MultiValueMap();
-        test.put("keyA", "objectA");
-        test.put("key", "object0");
+        MultiValueMap<K, V> test = new MultiValueMap<K, V>();
+        test.put((K) "keyA", "objectA");
+        test.put((K) "key", "object0");
         test.putAll(original);
 
         assertEquals(2, test.size());
@@ -288,14 +305,15 @@ public class TestMultiValueMap extends TestCase {
         assertEquals(true, test.containsValue("object2"));
     }
 
+    @SuppressWarnings("unchecked")
     public void testPutAll_Map2() {
-        Map original = new HashMap();
-        original.put("keyX", "object1");
-        original.put("keyY", "object2");
+        Map<K, V> original = new HashMap<K, V>();
+        original.put((K) "keyX", (V) "object1");
+        original.put((K) "keyY", (V) "object2");
 
-        MultiValueMap test = new MultiValueMap();
-        test.put("keyA", "objectA");
-        test.put("keyX", "object0");
+        MultiValueMap<K, V> test = new MultiValueMap<K, V>();
+        test.put((K) "keyA", "objectA");
+        test.put((K) "keyX", "object0");
         test.putAll(original);
 
         assertEquals(3, test.size());
@@ -309,30 +327,31 @@ public class TestMultiValueMap extends TestCase {
         assertEquals(true, test.containsValue("object2"));
     }
 
+    @SuppressWarnings("unchecked")
     public void testPutAll_KeyCollection() {
-        MultiValueMap map = new MultiValueMap();
-        Collection coll = Arrays.asList(new Object[] {"X", "Y", "Z"});
-        
-        assertEquals(true, map.putAll("A", coll));
+        MultiValueMap<K, V> map = new MultiValueMap<K, V>();
+        Collection<V> coll = (Collection<V>) Arrays.asList(new Object[] { "X", "Y", "Z" });
+
+        assertEquals(true, map.putAll((K) "A", coll));
         assertEquals(3, map.size("A"));
         assertEquals(true, map.containsValue("A", "X"));
         assertEquals(true, map.containsValue("A", "Y"));
         assertEquals(true, map.containsValue("A", "Z"));
-        
-        assertEquals(false, map.putAll("A", null));
+
+        assertEquals(false, map.putAll((K) "A", null));
         assertEquals(3, map.size("A"));
         assertEquals(true, map.containsValue("A", "X"));
         assertEquals(true, map.containsValue("A", "Y"));
         assertEquals(true, map.containsValue("A", "Z"));
-        
-        assertEquals(false, map.putAll("A", new ArrayList()));
+
+        assertEquals(false, map.putAll((K) "A", new ArrayList<V>()));
         assertEquals(3, map.size("A"));
         assertEquals(true, map.containsValue("A", "X"));
         assertEquals(true, map.containsValue("A", "Y"));
         assertEquals(true, map.containsValue("A", "Z"));
-        
-        coll = Arrays.asList(new Object[] {"M"});
-        assertEquals(true, map.putAll("A", coll));
+
+        coll = (Collection<V>) Arrays.asList(new Object[] { "M" });
+        assertEquals(true, map.putAll((K) "A", coll));
         assertEquals(4, map.size("A"));
         assertEquals(true, map.containsValue("A", "X"));
         assertEquals(true, map.containsValue("A", "Y"));
@@ -340,17 +359,18 @@ public class TestMultiValueMap extends TestCase {
         assertEquals(true, map.containsValue("A", "M"));
     }
 
+    @SuppressWarnings("unchecked")
     public void testRemove_KeyItem() {
-        MultiValueMap map = new MultiValueMap();
-        map.put("A", "AA");
-        map.put("A", "AB");
-        map.put("A", "AC");
+        MultiValueMap<K, V> map = new MultiValueMap<K, V>();
+        map.put((K) "A", "AA");
+        map.put((K) "A", "AB");
+        map.put((K) "A", "AC");
         assertEquals(null, map.remove("C", "CA"));
         assertEquals(null, map.remove("A", "AD"));
         assertEquals("AC", map.remove("A", "AC"));
         assertEquals("AB", map.remove("A", "AB"));
         assertEquals("AA", map.remove("A", "AA"));
-        assertEquals(new MultiValueMap(), map);
+        assertEquals(new MultiValueMap<K, V>(), map);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/commons-collections/blob/884baf0d/src/test/org/apache/commons/collections/map/TestPredicatedMap.java
----------------------------------------------------------------------
diff --git a/src/test/org/apache/commons/collections/map/TestPredicatedMap.java b/src/test/org/apache/commons/collections/map/TestPredicatedMap.java
index 6956aca..9edb140 100644
--- a/src/test/org/apache/commons/collections/map/TestPredicatedMap.java
+++ b/src/test/org/apache/commons/collections/map/TestPredicatedMap.java
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -24,77 +24,79 @@ import junit.framework.Test;
 import junit.framework.TestSuite;
 
 import org.apache.commons.collections.Predicate;
-import org.apache.commons.collections.PredicateUtils;
+import org.apache.commons.collections.functors.TruePredicate;
 
 /**
- * Extension of {@link TestMap} for exercising the 
+ * Extension of {@link TestMap} for exercising the
  * {@link PredicatedMap} implementation.
  *
  * @since Commons Collections 3.0
  * @version $Revision$ $Date$
- * 
+ *
  * @author Phil Steitz
  */
-public class TestPredicatedMap extends AbstractTestMap{
-    
-    protected static final Predicate truePredicate = PredicateUtils.truePredicate();
-    protected static final Predicate testPredicate = new Predicate() {
+public class TestPredicatedMap<K, V> extends AbstractTestMap<K, V> {
+
+    protected static final Predicate<Object> truePredicate = TruePredicate.<Object>truePredicate();
+
+    protected static final Predicate<Object> testPredicate = new Predicate<Object>() {
         public boolean evaluate(Object o) {
             return (o instanceof String);
         }
     };
-    
-    
+
     public TestPredicatedMap(String testName) {
         super(testName);
     }
-    
+
     public static Test suite() {
         return new TestSuite(TestPredicatedMap.class);
     }
-    
+
     public static void main(String args[]) {
         String[] testCaseName = { TestPredicatedMap.class.getName()};
         junit.textui.TestRunner.main(testCaseName);
     }
 
     //-----------------------------------------------------------------------
-    protected Map decorateMap(Map map, Predicate keyPredicate, 
-        Predicate valuePredicate) {
+    protected Map<K, V> decorateMap(Map<K, V> map, Predicate<? super K> keyPredicate,
+        Predicate<? super V> valuePredicate) {
         return PredicatedMap.decorate(map, keyPredicate, valuePredicate);
     }
-    
-    public Map makeEmptyMap() {
-        return decorateMap(new HashMap(), truePredicate, truePredicate);
+
+    public Map<K, V> makeObject() {
+        return decorateMap(new HashMap<K, V>(), truePredicate, truePredicate);
     }
-    
-    public Map makeTestMap() {
-        return decorateMap(new HashMap(), testPredicate, testPredicate);
+
+    public Map<K, V> makeTestMap() {
+        return decorateMap(new HashMap<K, V>(), testPredicate, testPredicate);
     }
 
     //-----------------------------------------------------------------------
+    @SuppressWarnings("unchecked")
     public void testEntrySet() {
-        Map map = makeTestMap();
+        Map<K, V> map = makeTestMap();
         assertTrue("returned entryset should not be null",
             map.entrySet() != null);
-        map = decorateMap(new HashMap(), null, null);
-        map.put("oneKey", "oneValue");
+        map = decorateMap(new HashMap<K, V>(), null, null);
+        map.put((K) "oneKey", (V) "oneValue");
         assertTrue("returned entryset should contain one entry",
-            map.entrySet().size() == 1); 
+            map.entrySet().size() == 1);
         map = decorateMap(map, null, null);
     }
-    
+
+    @SuppressWarnings("unchecked")
     public void testPut() {
-        Map map = makeTestMap();
+        Map<K, V> map = makeTestMap();
         try {
-            map.put("Hi", new Integer(3));
+            map.put((K) "Hi", (V) new Integer(3));
             fail("Illegal value should raise IllegalArgument");
         } catch (IllegalArgumentException e) {
             // expected
         }
 
         try {
-            map.put(new Integer(3), "Hi");
+            map.put((K) new Integer(3), (V) "Hi");
             fail("Illegal key should raise IllegalArgument");
         } catch (IllegalArgumentException e) {
             // expected
@@ -103,11 +105,11 @@ public class TestPredicatedMap extends AbstractTestMap{
         assertTrue(!map.containsKey(new Integer(3)));
         assertTrue(!map.containsValue(new Integer(3)));
 
-        Map map2 = new HashMap();
-        map2.put("A", "a");
-        map2.put("B", "b");
-        map2.put("C", "c");
-        map2.put("c", new Integer(3));
+        Map<K, V> map2 = new HashMap<K, V>();
+        map2.put((K) "A", (V) "a");
+        map2.put((K) "B", (V) "b");
+        map2.put((K) "C", (V) "c");
+        map2.put((K) "c", (V) new Integer(3));
 
         try {
             map.putAll(map2);
@@ -116,21 +118,21 @@ public class TestPredicatedMap extends AbstractTestMap{
             // expected
         }
 
-        map.put("E", "e");
-        Iterator iterator = map.entrySet().iterator();
+        map.put((K) "E", (V) "e");
+        Iterator<Map.Entry<K, V>> iterator = map.entrySet().iterator();
         try {
-            Map.Entry entry = (Map.Entry)iterator.next();
-            entry.setValue(new Integer(3));
+            Map.Entry<K, V> entry = iterator.next();
+            entry.setValue((V) new Integer(3));
             fail("Illegal value should raise IllegalArgument");
         } catch (IllegalArgumentException e) {
             // expected
         }
-        
-        map.put("F", "f");
+
+        map.put((K) "F", (V) "f");
         iterator = map.entrySet().iterator();
-        Map.Entry entry = (Map.Entry)iterator.next();
-        entry.setValue("x");
-        
+        Map.Entry<K, V> entry = iterator.next();
+        entry.setValue((V) "x");
+
     }
 
     public String getCompatibilityVersion() {