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:53 UTC

[08/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/keyvalue/TestMultiKey.java
----------------------------------------------------------------------
diff --git a/src/test/org/apache/commons/collections/keyvalue/TestMultiKey.java b/src/test/org/apache/commons/collections/keyvalue/TestMultiKey.java
index 4ebef26..6202632 100644
--- a/src/test/org/apache/commons/collections/keyvalue/TestMultiKey.java
+++ b/src/test/org/apache/commons/collections/keyvalue/TestMultiKey.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.
@@ -25,9 +25,9 @@ import junit.framework.TestSuite;
 
 /**
  * Unit tests for {@link org.apache.commons.collections.MultiKey}.
- * 
+ *
  * @version $Revision$ $Date$
- * 
+ *
  * @author Stephen Colebourne
  */
 public class TestMultiKey extends TestCase {
@@ -37,7 +37,7 @@ public class TestMultiKey extends TestCase {
     Integer THREE = new Integer(3);
     Integer FOUR = new Integer(4);
     Integer FIVE = new Integer(5);
-    
+
     public TestMultiKey(String name) {
         super(name);
     }
@@ -58,87 +58,87 @@ public class TestMultiKey extends TestCase {
     protected void tearDown() throws Exception {
         super.tearDown();
     }
-    
+
     //-----------------------------------------------------------------------
     public void testConstructors() throws Exception {
-        MultiKey mk = null;
-        mk = new MultiKey(ONE, TWO);
-        Assert.assertTrue(Arrays.equals(new Object[] {ONE, TWO}, mk.getKeys()));
+        MultiKey<Integer> mk = null;
+        mk = new MultiKey<Integer>(ONE, TWO);
+        Assert.assertTrue(Arrays.equals(new Object[] { ONE, TWO }, mk.getKeys()));
 
-        mk = new MultiKey(ONE, TWO, THREE);
-        Assert.assertTrue(Arrays.equals(new Object[] {ONE, TWO, THREE}, mk.getKeys()));
+        mk = new MultiKey<Integer>(ONE, TWO, THREE);
+        Assert.assertTrue(Arrays.equals(new Object[] { ONE, TWO, THREE }, mk.getKeys()));
 
-        mk = new MultiKey(ONE, TWO, THREE, FOUR);
-        Assert.assertTrue(Arrays.equals(new Object[] {ONE, TWO, THREE, FOUR}, mk.getKeys()));
+        mk = new MultiKey<Integer>(ONE, TWO, THREE, FOUR);
+        Assert.assertTrue(Arrays.equals(new Object[] { ONE, TWO, THREE, FOUR }, mk.getKeys()));
 
-        mk = new MultiKey(ONE, TWO, THREE, FOUR, FIVE);
-        Assert.assertTrue(Arrays.equals(new Object[] {ONE, TWO, THREE, FOUR, FIVE}, mk.getKeys()));
+        mk = new MultiKey<Integer>(ONE, TWO, THREE, FOUR, FIVE);
+        Assert.assertTrue(Arrays.equals(new Object[] { ONE, TWO, THREE, FOUR, FIVE }, mk.getKeys()));
 
-        mk = new MultiKey(new Object[] {THREE, FOUR, ONE, TWO}, false);
-        Assert.assertTrue(Arrays.equals(new Object[] {THREE, FOUR, ONE, TWO}, mk.getKeys()));
+        mk = new MultiKey<Integer>(new Integer[] { THREE, FOUR, ONE, TWO }, false);
+        Assert.assertTrue(Arrays.equals(new Object[] { THREE, FOUR, ONE, TWO }, mk.getKeys()));
     }
-    
+
     public void testConstructorsByArray() throws Exception {
-        MultiKey mk = null;
-        Object[] keys = new Object[] {THREE, FOUR, ONE, TWO};
-        mk = new MultiKey(keys);
-        Assert.assertTrue(Arrays.equals(new Object[] {THREE, FOUR, ONE, TWO}, mk.getKeys()));
+        MultiKey<Integer> mk = null;
+        Integer[] keys = new Integer[] { THREE, FOUR, ONE, TWO };
+        mk = new MultiKey<Integer>(keys);
+        Assert.assertTrue(Arrays.equals(new Object[] { THREE, FOUR, ONE, TWO }, mk.getKeys()));
         keys[3] = FIVE;  // no effect
-        Assert.assertTrue(Arrays.equals(new Object[] {THREE, FOUR, ONE, TWO}, mk.getKeys()));
+        Assert.assertTrue(Arrays.equals(new Object[] { THREE, FOUR, ONE, TWO }, mk.getKeys()));
 
-        keys = new Object[] {};
-        mk = new MultiKey(keys);
+        keys = new Integer[] {};
+        mk = new MultiKey<Integer>(keys);
         Assert.assertTrue(Arrays.equals(new Object[] {}, mk.getKeys()));
 
-        keys = new Object[] {THREE, FOUR, ONE, TWO};
-        mk = new MultiKey(keys, true);
-        Assert.assertTrue(Arrays.equals(new Object[] {THREE, FOUR, ONE, TWO}, mk.getKeys()));
+        keys = new Integer[] { THREE, FOUR, ONE, TWO };
+        mk = new MultiKey<Integer>(keys, true);
+        Assert.assertTrue(Arrays.equals(new Object[] { THREE, FOUR, ONE, TWO }, mk.getKeys()));
         keys[3] = FIVE;  // no effect
-        Assert.assertTrue(Arrays.equals(new Object[] {THREE, FOUR, ONE, TWO}, mk.getKeys()));
+        Assert.assertTrue(Arrays.equals(new Object[] { THREE, FOUR, ONE, TWO }, mk.getKeys()));
 
-        keys = new Object[] {THREE, FOUR, ONE, TWO};
-        mk = new MultiKey(keys, false);
-        Assert.assertTrue(Arrays.equals(new Object[] {THREE, FOUR, ONE, TWO}, mk.getKeys()));
+        keys = new Integer[] { THREE, FOUR, ONE, TWO };
+        mk = new MultiKey<Integer>(keys, false);
+        Assert.assertTrue(Arrays.equals(new Object[] { THREE, FOUR, ONE, TWO }, mk.getKeys()));
         // change key - don't do this!
         // the hashcode of the MultiKey is now broken
         keys[3] = FIVE;
-        Assert.assertTrue(Arrays.equals(new Object[] {THREE, FOUR, ONE, FIVE}, mk.getKeys()));
-    }        
-    
+        Assert.assertTrue(Arrays.equals(new Object[] { THREE, FOUR, ONE, FIVE }, mk.getKeys()));
+    }
+
     public void testConstructorsByArrayNull() throws Exception {
-        Object[] keys = null;
+        Integer[] keys = null;
         try {
-            new MultiKey(keys);
+            new MultiKey<Integer>(keys);
             fail();
         } catch (IllegalArgumentException ex) {}
         try {
-            new MultiKey(keys, true);
+            new MultiKey<Integer>(keys, true);
             fail();
         } catch (IllegalArgumentException ex) {}
         try {
-            new MultiKey(keys, false);
+            new MultiKey<Integer>(keys, false);
             fail();
         } catch (IllegalArgumentException ex) {}
     }
-    
+
     public void testSize() {
-        Assert.assertEquals(2, new MultiKey(ONE, TWO).size());
-        Assert.assertEquals(2, new MultiKey(null, null).size());
-        Assert.assertEquals(3, new MultiKey(ONE, TWO, THREE).size());
-        Assert.assertEquals(3, new MultiKey(null, null, null).size());
-        Assert.assertEquals(4, new MultiKey(ONE, TWO, THREE, FOUR).size());
-        Assert.assertEquals(4, new MultiKey(null, null, null, null).size());
-        Assert.assertEquals(5, new MultiKey(ONE, TWO, THREE, FOUR, FIVE).size());
-        Assert.assertEquals(5, new MultiKey(null, null, null, null, null).size());
-        
-        Assert.assertEquals(0, new MultiKey(new Object[] {}).size());
-        Assert.assertEquals(1, new MultiKey(new Object[] {ONE}).size());
-        Assert.assertEquals(2, new MultiKey(new Object[] {ONE, TWO}).size());
-        Assert.assertEquals(7, new MultiKey(new Object[] {ONE, TWO, ONE, TWO, ONE, TWO, ONE}).size());
+        Assert.assertEquals(2, new MultiKey<Integer>(ONE, TWO).size());
+        Assert.assertEquals(2, new MultiKey<Object>(null, null).size());
+        Assert.assertEquals(3, new MultiKey<Integer>(ONE, TWO, THREE).size());
+        Assert.assertEquals(3, new MultiKey<Object>(null, null, null).size());
+        Assert.assertEquals(4, new MultiKey<Integer>(ONE, TWO, THREE, FOUR).size());
+        Assert.assertEquals(4, new MultiKey<Object>(null, null, null, null).size());
+        Assert.assertEquals(5, new MultiKey<Integer>(ONE, TWO, THREE, FOUR, FIVE).size());
+        Assert.assertEquals(5, new MultiKey<Object>(null, null, null, null, null).size());
+
+        Assert.assertEquals(0, new MultiKey<Object>(new Object[] {}).size());
+        Assert.assertEquals(1, new MultiKey<Integer>(new Integer[] { ONE }).size());
+        Assert.assertEquals(2, new MultiKey<Integer>(new Integer[] { ONE, TWO }).size());
+        Assert.assertEquals(7, new MultiKey<Integer>(new Integer[] { ONE, TWO, ONE, TWO, ONE, TWO, ONE }).size());
     }
-    
+
     public void testGetIndexed() {
-        MultiKey mk = new MultiKey(ONE, TWO);
+        MultiKey<Integer> mk = new MultiKey<Integer>(ONE, TWO);
         Assert.assertSame(ONE, mk.getKey(0));
         Assert.assertSame(TWO, mk.getKey(1));
         try {
@@ -150,18 +150,18 @@ public class TestMultiKey extends TestCase {
             fail();
         } catch (IndexOutOfBoundsException ex) {}
     }
-    
+
     public void testGetKeysSimpleConstructor() {
-        MultiKey mk = new MultiKey(ONE, TWO);
+        MultiKey<Integer> mk = new MultiKey<Integer>(ONE, TWO);
         Object[] array = mk.getKeys();
         Assert.assertSame(ONE, array[0]);
         Assert.assertSame(TWO, array[1]);
         Assert.assertEquals(2, array.length);
     }
-    
+
     public void testGetKeysArrayConstructorCloned() {
-        Object[] keys = new Object[] {ONE, TWO};
-        MultiKey mk = new MultiKey(keys, true);
+        Integer[] keys = new Integer[] { ONE, TWO };
+        MultiKey<Integer> mk = new MultiKey<Integer>(keys, true);
         Object[] array = mk.getKeys();
         Assert.assertTrue(array != keys);
         Assert.assertTrue(Arrays.equals(array, keys));
@@ -169,10 +169,10 @@ public class TestMultiKey extends TestCase {
         Assert.assertSame(TWO, array[1]);
         Assert.assertEquals(2, array.length);
     }
-    
+
     public void testGetKeysArrayConstructorNonCloned() {
-        Object[] keys = new Object[] {ONE, TWO};
-        MultiKey mk = new MultiKey(keys, false);
+        Integer[] keys = new Integer[] { ONE, TWO };
+        MultiKey<Integer> mk = new MultiKey<Integer>(keys, false);
         Object[] array = mk.getKeys();
         Assert.assertTrue(array != keys);  // still not equal
         Assert.assertTrue(Arrays.equals(array, keys));
@@ -180,30 +180,30 @@ public class TestMultiKey extends TestCase {
         Assert.assertSame(TWO, array[1]);
         Assert.assertEquals(2, array.length);
     }
-    
+
     public void testHashCode() {
-        MultiKey mk1 = new MultiKey(ONE, TWO);
-        MultiKey mk2 = new MultiKey(ONE, TWO);
-        MultiKey mk3 = new MultiKey(ONE, "TWO");
-        
+        MultiKey<Integer> mk1 = new MultiKey<Integer>(ONE, TWO);
+        MultiKey<Integer> mk2 = new MultiKey<Integer>(ONE, TWO);
+        MultiKey<Object> mk3 = new MultiKey<Object>(ONE, "TWO");
+
         Assert.assertTrue(mk1.hashCode() == mk1.hashCode());
         Assert.assertTrue(mk1.hashCode() == mk2.hashCode());
         Assert.assertTrue(mk1.hashCode() != mk3.hashCode());
-        
+
         int total = (0 ^ ONE.hashCode()) ^ TWO.hashCode();
         Assert.assertEquals(total, mk1.hashCode());
     }
-    
+
     public void testEquals() {
-        MultiKey mk1 = new MultiKey(ONE, TWO);
-        MultiKey mk2 = new MultiKey(ONE, TWO);
-        MultiKey mk3 = new MultiKey(ONE, "TWO");
-        
+        MultiKey<Integer> mk1 = new MultiKey<Integer>(ONE, TWO);
+        MultiKey<Integer> mk2 = new MultiKey<Integer>(ONE, TWO);
+        MultiKey<Object> mk3 = new MultiKey<Object>(ONE, "TWO");
+
         Assert.assertEquals(mk1, mk1);
         Assert.assertEquals(mk1, mk2);
         Assert.assertTrue(mk1.equals(mk3) == false);
         Assert.assertTrue(mk1.equals("") == false);
         Assert.assertTrue(mk1.equals(null) == false);
     }
-    
+
 }

http://git-wip-us.apache.org/repos/asf/commons-collections/blob/884baf0d/src/test/org/apache/commons/collections/keyvalue/TestTiedMapEntry.java
----------------------------------------------------------------------
diff --git a/src/test/org/apache/commons/collections/keyvalue/TestTiedMapEntry.java b/src/test/org/apache/commons/collections/keyvalue/TestTiedMapEntry.java
index 9a2ec72..d3b812a 100644
--- a/src/test/org/apache/commons/collections/keyvalue/TestTiedMapEntry.java
+++ b/src/test/org/apache/commons/collections/keyvalue/TestTiedMapEntry.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,17 +24,16 @@ import junit.framework.TestSuite;
 
 /**
  * Test the TiedMapEntry class.
- * 
+ *
  * @since Commons Collections 3.0
  * @version $Revision$ $Date$
- * 
+ *
  * @author Stephen Colebourne
  */
-public class TestTiedMapEntry extends AbstractTestMapEntry {
+public class TestTiedMapEntry<K, V> extends AbstractTestMapEntry<K, V> {
 
     public TestTiedMapEntry(String testName) {
         super(testName);
-
     }
 
     public static void main(String[] args) {
@@ -49,10 +48,10 @@ public class TestTiedMapEntry extends AbstractTestMapEntry {
     /**
      * Gets the instance to test
      */
-    public Map.Entry makeMapEntry(Object key, Object value) {
-        Map map = new HashMap();
+    public Map.Entry<K, V> makeMapEntry(K key, V value) {
+        Map<K, V> map = new HashMap<K, V>();
         map.put(key, value);
-        return new TiedMapEntry(map, key);
+        return new TiedMapEntry<K, V>(map, key);
     }
 
     //-----------------------------------------------------------------------
@@ -66,29 +65,30 @@ public class TestTiedMapEntry extends AbstractTestMapEntry {
     /**
      * Tests the constructors.
      */
+    @SuppressWarnings("unchecked")
     public void testSetValue() {
-        Map map = new HashMap();
-        map.put("A", "a");
-        map.put("B", "b");
-        map.put("C", "c");
-        Map.Entry entry = new TiedMapEntry(map, "A");
+        Map<K, V> map = new HashMap<K, V>();
+        map.put((K) "A", (V) "a");
+        map.put((K) "B", (V) "b");
+        map.put((K) "C", (V) "c");
+        Map.Entry<K, V> entry = new TiedMapEntry<K, V>(map, (K) "A");
         assertSame("A", entry.getKey());
         assertSame("a", entry.getValue());
-        assertSame("a", entry.setValue("x"));
+        assertSame("a", entry.setValue((V) "x"));
         assertSame("A", entry.getKey());
         assertSame("x", entry.getValue());
-        
-        entry = new TiedMapEntry(map, "B");
+
+        entry = new TiedMapEntry<K, V>(map, (K) "B");
         assertSame("B", entry.getKey());
         assertSame("b", entry.getValue());
-        assertSame("b", entry.setValue("y"));
+        assertSame("b", entry.setValue((V) "y"));
         assertSame("B", entry.getKey());
         assertSame("y", entry.getValue());
-        
-        entry = new TiedMapEntry(map, "C");
+
+        entry = new TiedMapEntry<K, V>(map, (K) "C");
         assertSame("C", entry.getKey());
         assertSame("c", entry.getValue());
-        assertSame("c", entry.setValue("z"));
+        assertSame("c", entry.setValue((V) "z"));
         assertSame("C", entry.getKey());
         assertSame("z", entry.getValue());
     }

http://git-wip-us.apache.org/repos/asf/commons-collections/blob/884baf0d/src/test/org/apache/commons/collections/keyvalue/TestUnmodifiableMapEntry.java
----------------------------------------------------------------------
diff --git a/src/test/org/apache/commons/collections/keyvalue/TestUnmodifiableMapEntry.java b/src/test/org/apache/commons/collections/keyvalue/TestUnmodifiableMapEntry.java
index 27711d9..9c3398f 100644
--- a/src/test/org/apache/commons/collections/keyvalue/TestUnmodifiableMapEntry.java
+++ b/src/test/org/apache/commons/collections/keyvalue/TestUnmodifiableMapEntry.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.
@@ -26,17 +26,16 @@ import org.apache.commons.collections.Unmodifiable;
 
 /**
  * Test the UnmodifiableMapEntry class.
- * 
+ *
  * @since Commons Collections 3.0
  * @version $Revision$ $Date$
- * 
+ *
  * @author Neil O'Toole
  */
-public class TestUnmodifiableMapEntry extends AbstractTestMapEntry {
+public class TestUnmodifiableMapEntry<K, V> extends AbstractTestMapEntry<K, V> {
 
     public TestUnmodifiableMapEntry(String testName) {
         super(testName);
-
     }
 
     public static void main(String[] args) {
@@ -53,8 +52,8 @@ public class TestUnmodifiableMapEntry extends AbstractTestMapEntry {
      * Subclasses should override this method to return a Map.Entry
      * of the type being tested.
      */
-    public Map.Entry makeMapEntry() {
-        return new UnmodifiableMapEntry(null, null);
+    public Map.Entry<K, V> makeMapEntry() {
+        return new UnmodifiableMapEntry<K, V>(null, null);
     }
 
     /**
@@ -62,8 +61,8 @@ public class TestUnmodifiableMapEntry extends AbstractTestMapEntry {
      * Subclasses should override this method to return a Map.Entry
      * of the type being tested.
      */
-    public Map.Entry makeMapEntry(Object key, Object value) {
-        return new UnmodifiableMapEntry(key, value);
+    public Map.Entry<K, V> makeMapEntry(K key, V value) {
+        return new UnmodifiableMapEntry<K, V>(key, value);
     }
 
     //-----------------------------------------------------------------------
@@ -71,28 +70,30 @@ public class TestUnmodifiableMapEntry extends AbstractTestMapEntry {
      * Subclasses should override this method.
      *
      */
+    @SuppressWarnings("unchecked")
     public void testConstructors() {
         // 1. test key-value constructor
-        Map.Entry entry = new UnmodifiableMapEntry(key, value);
+        Map.Entry<K, V> entry = new UnmodifiableMapEntry<K, V>((K) key, (V) value);
         assertSame(key, entry.getKey());
         assertSame(value, entry.getValue());
 
         // 2. test pair constructor
-        KeyValue pair = new DefaultKeyValue(key, value);
-        entry = new UnmodifiableMapEntry(pair);
+        KeyValue<K, V> pair = new DefaultKeyValue<K, V>((K) key, (V) value);
+        entry = new UnmodifiableMapEntry<K, V>(pair);
         assertSame(key, entry.getKey());
         assertSame(value, entry.getValue());
 
         // 3. test copy constructor
-        Map.Entry entry2 = new UnmodifiableMapEntry(entry);
+        Map.Entry<K, V> entry2 = new UnmodifiableMapEntry<K, V>(entry);
         assertSame(key, entry2.getKey());
         assertSame(value, entry2.getValue());
 
         assertTrue(entry instanceof Unmodifiable);
     }
 
+    @SuppressWarnings("unchecked")
     public void testAccessorsAndMutators() {
-        Map.Entry entry = makeMapEntry(key, value);
+        Map.Entry<K, V> entry = makeMapEntry((K) key, (V) value);
 
         assertSame(key, entry.getKey());
         assertSame(value, entry.getValue());
@@ -108,11 +109,10 @@ public class TestUnmodifiableMapEntry extends AbstractTestMapEntry {
     }
 
     public void testUnmodifiable() {
-        Map.Entry entry = makeMapEntry();
+        Map.Entry<K, V> entry = makeMapEntry();
         try {
             entry.setValue(null);
             fail();
-
         } catch (UnsupportedOperationException ex) {}
     }
 

http://git-wip-us.apache.org/repos/asf/commons-collections/blob/884baf0d/src/test/org/apache/commons/collections/list/AbstractTestList.java
----------------------------------------------------------------------
diff --git a/src/test/org/apache/commons/collections/list/AbstractTestList.java b/src/test/org/apache/commons/collections/list/AbstractTestList.java
index ee1a912..c3f654a 100644
--- a/src/test/org/apache/commons/collections/list/AbstractTestList.java
+++ b/src/test/org/apache/commons/collections/list/AbstractTestList.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.
@@ -47,17 +47,17 @@ import org.apache.commons.collections.iterators.AbstractTestListIterator;
  * protected methods from AbstractTestCollection.
  *
  * @version $Revision$ $Date$
- * 
+ *
  * @author Rodney Waldhoff
  * @author Paul Jack
  * @author Stephen Colebourne
  * @author Neil O'Toole
  */
-public abstract class AbstractTestList extends AbstractTestCollection {
+public abstract class AbstractTestList<E> extends AbstractTestCollection<E> {
 
     /**
      * JUnit constructor.
-     * 
+     *
      * @param testName  the test class name
      */
     public AbstractTestList(String testName) {
@@ -66,7 +66,7 @@ public abstract class AbstractTestList extends AbstractTestCollection {
 
     //-----------------------------------------------------------------------
     /**
-     *  Returns true if the collections produced by 
+     *  Returns true if the collections produced by
      *  {@link #makeCollection()} and {@link #makeFullCollection()}
      *  support the <code>set operation.<p>
      *  Default implementation returns true.  Override if your collection
@@ -81,11 +81,12 @@ public abstract class AbstractTestList extends AbstractTestCollection {
      *  Verifies that the test list implementation matches the confirmed list
      *  implementation.
      */
+    @SuppressWarnings("unchecked")
     public void verify() {
         super.verify();
 
-        List list1 = getList();
-        List list2 = getConfirmedList();
+        List<E> list1 = getCollection();
+        List<E> list2 = getConfirmed();
 
         assertEquals("List should equal confirmed", list1, list2);
         assertEquals("Confirmed should equal list", list2, list1);
@@ -93,9 +94,9 @@ public abstract class AbstractTestList extends AbstractTestCollection {
         assertEquals("Hash codes should be equal", list1.hashCode(), list2.hashCode());
 
         int i = 0;
-        Iterator iterator1 = list1.iterator();
-        Iterator iterator2 = list2.iterator();
-        Object[] array = list1.toArray();
+        Iterator<E> iterator1 = list1.iterator();
+        Iterator<E> iterator2 = list2.iterator();
+        E[] array = (E[]) list1.toArray();
         while (iterator2.hasNext()) {
             assertTrue("List iterator should have next", iterator1.hasNext());
             Object o1 = iterator1.next();
@@ -120,35 +121,16 @@ public abstract class AbstractTestList extends AbstractTestCollection {
     /**
      * Returns an empty {@link ArrayList}.
      */
-    public Collection makeConfirmedCollection() {
-        ArrayList list = new ArrayList();
+    public Collection<E> makeConfirmedCollection() {
+        ArrayList<E> list = new ArrayList<E>();
         return list;
     }
 
     /**
      * Returns a full {@link ArrayList}.
      */
-    public Collection makeConfirmedFullCollection() {
-        ArrayList list = new ArrayList();
-        list.addAll(Arrays.asList(getFullElements()));
-        return list;
-    }
-
-    /**
-     * Return a new, empty {@link List} to be used for testing.
-     *
-     * @return an empty list for testing.
-     */
-    public abstract List makeEmptyList();
-
-    /**
-     * Return a new, full {@link List} to be used for testing.
-     *
-     * @return a full list for testing
-     */
-    public List makeFullList() {
-        // only works if list supports optional "addAll(Collection)" 
-        List list = makeEmptyList();
+    public Collection<E> makeConfirmedFullCollection() {
+        ArrayList<E> list = new ArrayList<E>();
         list.addAll(Arrays.asList(getFullElements()));
         return list;
     }
@@ -158,17 +140,16 @@ public abstract class AbstractTestList extends AbstractTestCollection {
      *
      * @return an empty list to be used for testing
      */
-    public final Collection makeCollection() {
-        return makeEmptyList();
-    }
+    public abstract List<E> makeObject();
 
     /**
-     * Returns {@link #makeFullList()}.
-     *
-     * @return a full list to be used for testing
+     * {@inheritDoc}
      */
-    public final Collection makeFullCollection() {
-        return makeFullList();
+    public List<E> makeFullCollection() {
+        // only works if list supports optional "addAll(Collection)"
+        List<E> list = makeObject();
+        list.addAll(Arrays.asList(getFullElements()));
+        return list;
     }
 
     //-----------------------------------------------------------------------
@@ -177,8 +158,9 @@ public abstract class AbstractTestList extends AbstractTestCollection {
      *
      * @return the collection field as a List
      */
-    public List getList() {
-        return (List) collection;
+    @Override
+    public List<E> getCollection() {
+        return (List<E>) super.getCollection();
     }
 
     /**
@@ -186,8 +168,8 @@ public abstract class AbstractTestList extends AbstractTestCollection {
      *
      * @return the confirmed field as a List
      */
-    public List getConfirmedList() {
-        return (List) confirmed;
+    public List<E> getConfirmed() {
+        return (List<E>) super.getConfirmed();
     }
 
     //-----------------------------------------------------------------------
@@ -200,11 +182,11 @@ public abstract class AbstractTestList extends AbstractTestCollection {
             return;
         }
 
-        List list;
-        Object element = getOtherElements()[0];
+        List<E> list;
+        E element = getOtherElements()[0];
 
         try {
-            list = makeEmptyList();
+            list = makeObject();
             list.add(Integer.MIN_VALUE, element);
             fail("List.add should throw IndexOutOfBoundsException [Integer.MIN_VALUE]");
         } catch (IndexOutOfBoundsException e) {
@@ -212,7 +194,7 @@ public abstract class AbstractTestList extends AbstractTestCollection {
         }
 
         try {
-            list = makeEmptyList();
+            list = makeObject();
             list.add(-1, element);
             fail("List.add should throw IndexOutOfBoundsException [-1]");
         } catch (IndexOutOfBoundsException e) {
@@ -220,7 +202,7 @@ public abstract class AbstractTestList extends AbstractTestCollection {
         }
 
         try {
-            list = makeEmptyList();
+            list = makeObject();
             list.add(1, element);
             fail("List.add should throw IndexOutOfBoundsException [1]");
         } catch (IndexOutOfBoundsException e) {
@@ -228,7 +210,7 @@ public abstract class AbstractTestList extends AbstractTestCollection {
         }
 
         try {
-            list = makeEmptyList();
+            list = makeObject();
             list.add(Integer.MAX_VALUE, element);
             fail("List.add should throw IndexOutOfBoundsException [Integer.MAX_VALUE]");
         } catch (IndexOutOfBoundsException e) {
@@ -245,11 +227,11 @@ public abstract class AbstractTestList extends AbstractTestCollection {
             return;
         }
 
-        List list;
-        Object element = getOtherElements()[0];
+        List<E> list;
+        E element = getOtherElements()[0];
 
         try {
-            list = makeFullList();
+            list = makeFullCollection();
             list.add(Integer.MIN_VALUE, element);
             fail("List.add should throw IndexOutOfBoundsException [Integer.MIN_VALUE]");
         } catch (IndexOutOfBoundsException e) {
@@ -257,7 +239,7 @@ public abstract class AbstractTestList extends AbstractTestCollection {
         }
 
         try {
-            list = makeFullList();
+            list = makeFullCollection();
             list.add(-1, element);
             fail("List.add should throw IndexOutOfBoundsException [-1]");
         } catch (IndexOutOfBoundsException e) {
@@ -265,7 +247,7 @@ public abstract class AbstractTestList extends AbstractTestCollection {
         }
 
         try {
-            list = makeFullList();
+            list = makeFullCollection();
             list.add(list.size() + 1, element);
             fail("List.add should throw IndexOutOfBoundsException [size + 1]");
         } catch (IndexOutOfBoundsException e) {
@@ -273,7 +255,7 @@ public abstract class AbstractTestList extends AbstractTestCollection {
         }
 
         try {
-            list = makeFullList();
+            list = makeFullCollection();
             list.add(Integer.MAX_VALUE, element);
             fail("List.add should throw IndexOutOfBoundsException [Integer.MAX_VALUE]");
         } catch (IndexOutOfBoundsException e) {
@@ -289,13 +271,13 @@ public abstract class AbstractTestList extends AbstractTestCollection {
             return;
         }
 
-        Object element = getOtherElements()[0];
+        E element = getOtherElements()[0];
         int max = getFullElements().length;
 
         for (int i = 0; i <= max; i++) {
             resetFull();
-            ((List) collection).add(i, element);
-            ((List) confirmed).add(i, element);
+            ((List<E>) getCollection()).add(i, element);
+            ((List<E>) getConfirmed()).add(i, element);
             verify();
         }
     }
@@ -305,13 +287,13 @@ public abstract class AbstractTestList extends AbstractTestCollection {
      */
     public void testListEquals() {
         resetEmpty();
-        List list = getList();
-        assertEquals("Empty lists should be equal", true, list.equals(confirmed));
+        List<E> list = getCollection();
+        assertEquals("Empty lists should be equal", true, list.equals(getConfirmed()));
         verify();
         assertEquals("Empty list should equal self", true, list.equals(list));
         verify();
 
-        List list2 = Arrays.asList(getFullElements());
+        List<E> list2 = Arrays.asList(getFullElements());
         assertEquals("Empty list shouldn't equal full", false, list.equals(list2));
         verify();
 
@@ -320,13 +302,13 @@ public abstract class AbstractTestList extends AbstractTestCollection {
         verify();
 
         resetFull();
-        list = getList();
-        assertEquals("Full lists should be equal", true, list.equals(confirmed));
+        list = getCollection();
+        assertEquals("Full lists should be equal", true, list.equals(getConfirmed()));
         verify();
         assertEquals("Full list should equal self", true, list.equals(list));
         verify();
 
-        list2 = makeEmptyList();
+        list2 = makeObject();
         assertEquals("Full list shouldn't equal empty", false, list.equals(list2));
         verify();
 
@@ -338,8 +320,8 @@ public abstract class AbstractTestList extends AbstractTestCollection {
         if (list2.size() < 2 && isAddSupported()) {
             // main list is only size 1, so lets add other elements to get a better list
             list.addAll(Arrays.asList(getOtherElements()));
-            confirmed.addAll(Arrays.asList(getOtherElements()));
-            list2 = new ArrayList(list2);
+            getConfirmed().addAll(Arrays.asList(getOtherElements()));
+            list2 = new ArrayList<E>(list2);
             list2.addAll(Arrays.asList(getOtherElements()));
         }
         if (list2.size() > 1) {
@@ -351,17 +333,17 @@ public abstract class AbstractTestList extends AbstractTestCollection {
         }
 
         resetFull();
-        list = getList();
+        list = getCollection();
         assertEquals("List shouldn't equal String", false, list.equals(""));
         verify();
 
-        final List listForC = Arrays.asList(getFullElements());
-        Collection c = new AbstractCollection() {
+        final List<E> listForC = Arrays.asList(getFullElements());
+        Collection<E> c = new AbstractCollection<E>() {
             public int size() {
                 return listForC.size();
             }
 
-            public Iterator iterator() {
+            public Iterator<E> iterator() {
                 return listForC.iterator();
             }
         };
@@ -375,14 +357,14 @@ public abstract class AbstractTestList extends AbstractTestCollection {
      */
     public void testListHashCode() {
         resetEmpty();
-        int hash1 = collection.hashCode();
-        int hash2 = confirmed.hashCode();
+        int hash1 = getCollection().hashCode();
+        int hash2 = getConfirmed().hashCode();
         assertEquals("Empty lists should have equal hashCodes", hash1, hash2);
         verify();
 
         resetFull();
-        hash1 = collection.hashCode();
-        hash2 = confirmed.hashCode();
+        hash1 = getCollection().hashCode();
+        hash2 = getConfirmed().hashCode();
         assertEquals("Full lists should have equal hashCodes", hash1, hash2);
         verify();
     }
@@ -392,8 +374,8 @@ public abstract class AbstractTestList extends AbstractTestCollection {
      */
     public void testListGetByIndex() {
         resetFull();
-        List list = getList();
-        Object[] elements = getFullElements();
+        List<E> list = getCollection();
+        E[] elements = getFullElements();
         for (int i = 0; i < elements.length; i++) {
             assertEquals("List should contain correct elements", elements[i], list.get(i));
             verify();
@@ -405,7 +387,7 @@ public abstract class AbstractTestList extends AbstractTestCollection {
      *  empty list.
      */
     public void testListGetByIndexBoundsChecking() {
-        List list = makeEmptyList();
+        List<E> list = makeObject();
 
         try {
             list.get(Integer.MIN_VALUE);
@@ -448,7 +430,7 @@ public abstract class AbstractTestList extends AbstractTestCollection {
      *  full list.
      */
     public void testListGetByIndexBoundsChecking2() {
-        List list = makeFullList();
+        List<E> list = makeFullCollection();
 
         try {
             list.get(Integer.MIN_VALUE);
@@ -484,10 +466,10 @@ public abstract class AbstractTestList extends AbstractTestCollection {
      */
     public void testListIndexOf() {
         resetFull();
-        List list1 = getList();
-        List list2 = getConfirmedList();
+        List<E> list1 = getCollection();
+        List<E> list2 = getConfirmed();
 
-        Iterator iterator = list2.iterator();
+        Iterator<E> iterator = list2.iterator();
         while (iterator.hasNext()) {
             Object element = iterator.next();
             assertEquals("indexOf should return correct result",
@@ -495,7 +477,7 @@ public abstract class AbstractTestList extends AbstractTestCollection {
             verify();
         }
 
-        Object[] other = getOtherElements();
+        E[] other = getOtherElements();
         for (int i = 0; i < other.length; i++) {
             assertEquals("indexOf should return -1 for nonexistent element",
                 list1.indexOf(other[i]), -1);
@@ -508,18 +490,18 @@ public abstract class AbstractTestList extends AbstractTestCollection {
      */
     public void testListLastIndexOf() {
         resetFull();
-        List list1 = getList();
-        List list2 = getConfirmedList();
+        List<E> list1 = getCollection();
+        List<E> list2 = getConfirmed();
 
-        Iterator iterator = list2.iterator();
+        Iterator<E> iterator = list2.iterator();
         while (iterator.hasNext()) {
-            Object element = iterator.next();
+            E element = iterator.next();
             assertEquals("lastIndexOf should return correct result",
               list1.lastIndexOf(element), list2.lastIndexOf(element));
             verify();
         }
 
-        Object[] other = getOtherElements();
+        E[] other = getOtherElements();
         for (int i = 0; i < other.length; i++) {
             assertEquals("lastIndexOf should return -1 for nonexistent " +
               "element", list1.lastIndexOf(other[i]), -1);
@@ -536,8 +518,8 @@ public abstract class AbstractTestList extends AbstractTestCollection {
             return;
         }
 
-        List list = makeEmptyList();
-        Object element = getOtherElements()[0];
+        List<E> list = makeObject();
+        E element = getOtherElements()[0];
 
         try {
             list.set(Integer.MIN_VALUE, element);
@@ -583,8 +565,8 @@ public abstract class AbstractTestList extends AbstractTestCollection {
     public void testListSetByIndexBoundsChecking2() {
         if (!isSetSupported()) return;
 
-        List list = makeFullList();
-        Object element = getOtherElements()[0];
+        List<E> list = makeFullCollection();
+        E element = getOtherElements()[0];
 
         try {
             list.set(Integer.MIN_VALUE, element);
@@ -592,21 +574,21 @@ public abstract class AbstractTestList extends AbstractTestCollection {
               "[Integer.MIN_VALUE]");
         } catch(IndexOutOfBoundsException e) {
             // expected
-        } 
+        }
 
         try {
             list.set(-1, element);
             fail("List.set should throw IndexOutOfBoundsException [-1]");
         } catch(IndexOutOfBoundsException e) {
             // expected
-        } 
+        }
 
         try {
             list.set(getFullElements().length, element);
             fail("List.set should throw IndexOutOfBoundsException [size]");
         } catch(IndexOutOfBoundsException e) {
             // expected
-        } 
+        }
 
         try {
             list.set(Integer.MAX_VALUE, element);
@@ -614,7 +596,7 @@ public abstract class AbstractTestList extends AbstractTestCollection {
               "[Integer.MAX_VALUE]");
         } catch(IndexOutOfBoundsException e) {
             // expected
-        } 
+        }
     }
 
 
@@ -625,29 +607,28 @@ public abstract class AbstractTestList extends AbstractTestCollection {
         if (!isSetSupported()) return;
 
         resetFull();
-        Object[] elements = getFullElements();
-        Object[] other = getOtherElements();
+        E[] elements = getFullElements();
+        E[] other = getOtherElements();
 
         for (int i = 0; i < elements.length; i++) {
-            Object n = other[i % other.length];
-            Object v = ((List)collection).set(i, n);
+            E n = other[i % other.length];
+            E v = ((List<E>) getCollection()).set(i, n);
             assertEquals("Set should return correct element", elements[i], v);
-            ((List)confirmed).set(i, n);
+            ((List<E>) getConfirmed()).set(i, n);
             verify();
         }
     }
 
-
     /**
      *  If {@link #isSetSupported()} returns false, tests that set operation
      *  raises <Code>UnsupportedOperationException.
      */
     public void testUnsupportedSet() {
         if (isSetSupported()) return;
-        
+
         resetFull();
         try {
-            ((List) collection).set(0, new Object());
+            ((List<E>) getCollection()).set(0, getFullElements()[0]);
             fail("Emtpy collection should not support set.");
         } catch (UnsupportedOperationException e) {
             // expected
@@ -656,7 +637,6 @@ public abstract class AbstractTestList extends AbstractTestCollection {
         // thrown.
         verify();
     }
-    
 
     /**
      *  Tests bounds checking for {@link List#remove(int)} on an
@@ -665,47 +645,44 @@ public abstract class AbstractTestList extends AbstractTestCollection {
     public void testListRemoveByIndexBoundsChecking() {
         if (!isRemoveSupported()) return;
 
-        List list = makeEmptyList();
+        List<E> list = makeObject();
 
         try {
             list.remove(Integer.MIN_VALUE);
-            fail("List.remove should throw IndexOutOfBoundsException " +
-              "[Integer.MIN_VALUE]");
+            fail("List.remove should throw IndexOutOfBoundsException [Integer.MIN_VALUE]");
         } catch(IndexOutOfBoundsException e) {
             // expected
-        } 
+        }
 
         try {
             list.remove(-1);
             fail("List.remove should throw IndexOutOfBoundsException [-1]");
         } catch(IndexOutOfBoundsException e) {
             // expected
-        } 
+        }
 
         try {
             list.remove(0);
             fail("List.remove should throw IndexOutOfBoundsException [0]");
         } catch(IndexOutOfBoundsException e) {
             // expected
-        } 
+        }
 
         try {
             list.remove(1);
             fail("List.remove should throw IndexOutOfBoundsException [1]");
         } catch(IndexOutOfBoundsException e) {
             // expected
-        } 
+        }
 
         try {
             list.remove(Integer.MAX_VALUE);
-            fail("List.remove should throw IndexOutOfBoundsException " +
-              "[Integer.MAX_VALUE]");
+            fail("List.remove should throw IndexOutOfBoundsException [Integer.MAX_VALUE]");
         } catch(IndexOutOfBoundsException e) {
             // expected
         }
     }
 
-
     /**
      *  Tests bounds checking for {@link List#remove(int)} on a
      *  full list.
@@ -713,7 +690,7 @@ public abstract class AbstractTestList extends AbstractTestCollection {
     public void testListRemoveByIndexBoundsChecking2() {
         if (!isRemoveSupported()) return;
 
-        List list = makeFullList();
+        List<E> list = makeFullCollection();
 
         try {
             list.remove(Integer.MIN_VALUE);
@@ -721,21 +698,21 @@ public abstract class AbstractTestList extends AbstractTestCollection {
               "[Integer.MIN_VALUE]");
         } catch(IndexOutOfBoundsException e) {
             // expected
-        } 
+        }
 
         try {
             list.remove(-1);
             fail("List.remove should throw IndexOutOfBoundsException [-1]");
         } catch(IndexOutOfBoundsException e) {
             // expected
-        } 
+        }
 
         try {
             list.remove(getFullElements().length);
             fail("List.remove should throw IndexOutOfBoundsException [size]");
         } catch(IndexOutOfBoundsException e) {
             // expected
-        } 
+        }
 
         try {
             list.remove(Integer.MAX_VALUE);
@@ -743,7 +720,7 @@ public abstract class AbstractTestList extends AbstractTestCollection {
               "[Integer.MAX_VALUE]");
         } catch(IndexOutOfBoundsException e) {
             // expected
-        } 
+        }
     }
 
 
@@ -756,44 +733,42 @@ public abstract class AbstractTestList extends AbstractTestCollection {
         int max = getFullElements().length;
         for (int i = 0; i < max; i++) {
             resetFull();
-            Object o1 = ((List)collection).remove(i);
-            Object o2 = ((List)confirmed).remove(i);
+            E o1 = ((List<E>) getCollection()).remove(i);
+            E o2 = ((List<E>) getConfirmed()).remove(i);
             assertEquals("remove should return correct element", o1, o2);
             verify();
         }
     }
 
-
     /**
      *  Tests the read-only bits of {@link List#listIterator()}.
      */
     public void testListListIterator() {
         resetFull();
-        forwardTest(getList().listIterator(), 0);
-        backwardTest(getList().listIterator(), 0);
+        forwardTest(getCollection().listIterator(), 0);
+        backwardTest(getCollection().listIterator(), 0);
     }
 
-
     /**
      *  Tests the read-only bits of {@link List#listIterator(int)}.
      */
     public void testListListIteratorByIndex() {
         resetFull();
         try {
-            getList().listIterator(-1);
+            getCollection().listIterator(-1);
         } catch (IndexOutOfBoundsException ex) {}
         resetFull();
         try {
-            getList().listIterator(getList().size() + 1);
+            getCollection().listIterator(getCollection().size() + 1);
         } catch (IndexOutOfBoundsException ex) {}
         resetFull();
-        for (int i = 0; i <= confirmed.size(); i++) {
-            forwardTest(getList().listIterator(i), i);
-            backwardTest(getList().listIterator(i), i);
+        for (int i = 0; i <= getConfirmed().size(); i++) {
+            forwardTest(getCollection().listIterator(i), i);
+            backwardTest(getCollection().listIterator(i), i);
         }
         resetFull();
-        for (int i = 0; i <= confirmed.size(); i++) {
-            backwardTest(getList().listIterator(i), i);
+        for (int i = 0; i <= getConfirmed().size(); i++) {
+            backwardTest(getCollection().listIterator(i), i);
         }
     }
 
@@ -804,25 +779,25 @@ public abstract class AbstractTestList extends AbstractTestCollection {
     public void testListListIteratorPreviousRemoveNext() {
         if (isRemoveSupported() == false) return;
         resetFull();
-        if (collection.size() < 4) return;
-        ListIterator it = getList().listIterator();
-        Object zero = it.next();
-        Object one = it.next();
-        Object two = it.next();
-        Object two2 = it.previous();
-        Object one2 = it.previous();
+        if (getCollection().size() < 4) return;
+        ListIterator<E> it = getCollection().listIterator();
+        E zero = it.next();
+        E one = it.next();
+        E two = it.next();
+        E two2 = it.previous();
+        E one2 = it.previous();
         assertEquals(one, one2);
         assertEquals(two, two2);
-        assertEquals(zero, getList().get(0));
-        assertEquals(one, getList().get(1));
-        assertEquals(two, getList().get(2));
-        
+        assertEquals(zero, getCollection().get(0));
+        assertEquals(one, getCollection().get(1));
+        assertEquals(two, getCollection().get(2));
+
         it.remove(); // removed element at index 1 (one)
-        assertEquals(zero, getList().get(0));
-        assertEquals(two, getList().get(1));
-        Object two3 = it.next();  // do next after remove
+        assertEquals(zero, getCollection().get(0));
+        assertEquals(two, getCollection().get(1));
+        E two3 = it.next();  // do next after remove
         assertEquals(two, two3);
-        assertEquals(collection.size() > 2, it.hasNext());
+        assertEquals(getCollection().size() > 2, it.hasNext());
         assertEquals(true, it.hasPrevious());
     }
 
@@ -832,26 +807,26 @@ public abstract class AbstractTestList extends AbstractTestCollection {
     public void testListListIteratorPreviousRemovePrevious() {
         if (isRemoveSupported() == false) return;
         resetFull();
-        if (collection.size() < 4) return;
-        ListIterator it = getList().listIterator();
-        Object zero = it.next();
-        Object one = it.next();
-        Object two = it.next();
-        Object two2 = it.previous();
-        Object one2 = it.previous();
+        if (getCollection().size() < 4) return;
+        ListIterator<E> it = getCollection().listIterator();
+        E zero = it.next();
+        E one = it.next();
+        E two = it.next();
+        E two2 = it.previous();
+        E one2 = it.previous();
         assertEquals(one, one2);
         assertEquals(two, two2);
-        assertEquals(zero, getList().get(0));
-        assertEquals(one, getList().get(1));
-        assertEquals(two, getList().get(2));
-        
+        assertEquals(zero, getCollection().get(0));
+        assertEquals(one, getCollection().get(1));
+        assertEquals(two, getCollection().get(2));
+
         it.remove(); // removed element at index 1 (one)
-        assertEquals(zero, getList().get(0));
-        assertEquals(two, getList().get(1));
-        Object zero3 = it.previous();  // do previous after remove
+        assertEquals(zero, getCollection().get(0));
+        assertEquals(two, getCollection().get(1));
+        E zero3 = it.previous();  // do previous after remove
         assertEquals(zero, zero3);
         assertEquals(false, it.hasPrevious());
-        assertEquals(collection.size() > 2, it.hasNext());
+        assertEquals(getCollection().size() > 2, it.hasNext());
     }
 
     /**
@@ -860,22 +835,22 @@ public abstract class AbstractTestList extends AbstractTestCollection {
     public void testListListIteratorNextRemoveNext() {
         if (isRemoveSupported() == false) return;
         resetFull();
-        if (collection.size() < 4) return;
-        ListIterator it = getList().listIterator();
-        Object zero = it.next();
-        Object one = it.next();
-        Object two = it.next();
-        assertEquals(zero, getList().get(0));
-        assertEquals(one, getList().get(1));
-        assertEquals(two, getList().get(2));
-        Object three = getList().get(3);
-        
+        if (getCollection().size() < 4) return;
+        ListIterator<E> it = getCollection().listIterator();
+        E zero = it.next();
+        E one = it.next();
+        E two = it.next();
+        assertEquals(zero, getCollection().get(0));
+        assertEquals(one, getCollection().get(1));
+        assertEquals(two, getCollection().get(2));
+        E three = getCollection().get(3);
+
         it.remove(); // removed element at index 2 (two)
-        assertEquals(zero, getList().get(0));
-        assertEquals(one, getList().get(1));
-        Object three2 = it.next();  // do next after remove
+        assertEquals(zero, getCollection().get(0));
+        assertEquals(one, getCollection().get(1));
+        E three2 = it.next();  // do next after remove
         assertEquals(three, three2);
-        assertEquals(collection.size() > 3, it.hasNext());
+        assertEquals(getCollection().size() > 3, it.hasNext());
         assertEquals(true, it.hasPrevious());
     }
 
@@ -885,19 +860,19 @@ public abstract class AbstractTestList extends AbstractTestCollection {
     public void testListListIteratorNextRemovePrevious() {
         if (isRemoveSupported() == false) return;
         resetFull();
-        if (collection.size() < 4) return;
-        ListIterator it = getList().listIterator();
-        Object zero = it.next();
-        Object one = it.next();
-        Object two = it.next();
-        assertEquals(zero, getList().get(0));
-        assertEquals(one, getList().get(1));
-        assertEquals(two, getList().get(2));
-        
+        if (getCollection().size() < 4) return;
+        ListIterator<E> it = getCollection().listIterator();
+        E zero = it.next();
+        E one = it.next();
+        E two = it.next();
+        assertEquals(zero, getCollection().get(0));
+        assertEquals(one, getCollection().get(1));
+        assertEquals(two, getCollection().get(2));
+
         it.remove(); // removed element at index 2 (two)
-        assertEquals(zero, getList().get(0));
-        assertEquals(one, getList().get(1));
-        Object one2 = it.previous();  // do previous after remove
+        assertEquals(zero, getCollection().get(0));
+        assertEquals(one, getCollection().get(1));
+        E one2 = it.previous();  // do previous after remove
         assertEquals(one, one2);
         assertEquals(true, it.hasNext());
         assertEquals(true, it.hasPrevious());
@@ -910,13 +885,13 @@ public abstract class AbstractTestList extends AbstractTestCollection {
      *  @param iter  the iterator to traverse
      *  @param i     the starting index
      */
-    private void forwardTest(ListIterator iter, int i) {
-        List list = getList();
+    private void forwardTest(ListIterator<E> iter, int i) {
+        List<E> list = getCollection();
         int max = getFullElements().length;
 
         while (i < max) {
             assertTrue("Iterator should have next", iter.hasNext());
-            assertEquals("Iterator.nextIndex should work", 
+            assertEquals("Iterator.nextIndex should work",
               iter.nextIndex(), i);
             assertEquals("Iterator.previousIndex should work",
               iter.previousIndex(), i - 1);
@@ -927,8 +902,7 @@ public abstract class AbstractTestList extends AbstractTestCollection {
 
         assertTrue("Iterator shouldn't have next", !iter.hasNext());
         assertEquals("nextIndex should be size", iter.nextIndex(), max);
-        assertEquals("previousIndex should be size - 1", 
-          iter.previousIndex(), max - 1);
+        assertEquals("previousIndex should be size - 1", iter.previousIndex(), max - 1);
 
         try {
             iter.next();
@@ -938,21 +912,20 @@ public abstract class AbstractTestList extends AbstractTestCollection {
         }
     }
 
-
     /**
      *  Traverses to the beginning of the given iterator.
      *
      *  @param iter  the iterator to traverse
      *  @param i     the starting index
      */
-    private void backwardTest(ListIterator iter, int i) {
-        List list = getList();
+    private void backwardTest(ListIterator<E> iter, int i) {
+        List<E> list = getCollection();
 
         while (i > 0) {
             assertTrue("Iterator should have previous, i:" + i, iter.hasPrevious());
             assertEquals("Iterator.nextIndex should work, i:" + i, iter.nextIndex(), i);
             assertEquals("Iterator.previousIndex should work, i:" + i, iter.previousIndex(), i - 1);
-            Object o = iter.previous();
+            E o = iter.previous();
             assertEquals("Iterator returned correct element", list.get(i - 1), o);
             i--;
         }
@@ -981,12 +954,12 @@ public abstract class AbstractTestList extends AbstractTestCollection {
         if (!isAddSupported()) return;
 
         resetEmpty();
-        List list1 = getList();
-        List list2 = getConfirmedList();
+        List<E> list1 = getCollection();
+        List<E> list2 = getConfirmed();
 
-        Object[] elements = getFullElements();
-        ListIterator iter1 = list1.listIterator();
-        ListIterator iter2 = list2.listIterator();
+        E[] elements = getFullElements();
+        ListIterator<E> iter1 = list1.listIterator();
+        ListIterator<E> iter2 = list2.listIterator();
 
         for (int i = 0; i < elements.length; i++) {
             iter1.add(elements[i]);
@@ -995,8 +968,8 @@ public abstract class AbstractTestList extends AbstractTestCollection {
         }
 
         resetFull();
-        iter1 = getList().listIterator();
-        iter2 = getConfirmedList().listIterator();
+        iter1 = getCollection().listIterator();
+        iter2 = getConfirmed().listIterator();
         for (int i = 0; i < elements.length; i++) {
             iter1.next();
             iter2.next();
@@ -1006,7 +979,6 @@ public abstract class AbstractTestList extends AbstractTestCollection {
         }
     }
 
-
     /**
      *  Tests the {@link ListIterator#set(Object)} method of the list
      *  iterator.
@@ -1014,11 +986,11 @@ public abstract class AbstractTestList extends AbstractTestCollection {
     public void testListIteratorSet() {
         if (!isSetSupported()) return;
 
-        Object[] elements = getFullElements();
+        E[] elements = getFullElements();
 
         resetFull();
-        ListIterator iter1 = getList().listIterator();
-        ListIterator iter2 = getConfirmedList().listIterator();
+        ListIterator<E> iter1 = getCollection().listIterator();
+        ListIterator<E> iter2 = getConfirmed().listIterator();
         for (int i = 0; i < elements.length; i++) {
             iter1.next();
             iter2.next();
@@ -1028,27 +1000,26 @@ public abstract class AbstractTestList extends AbstractTestCollection {
         }
     }
 
-
-    public void testEmptyListSerialization() 
-    throws IOException, ClassNotFoundException {
-        List list = makeEmptyList();
+    @SuppressWarnings("unchecked")
+    public void testEmptyListSerialization() throws IOException, ClassNotFoundException {
+        List<E> list = makeObject();
         if (!(list instanceof Serializable && isTestSerialization())) return;
-        
+
         byte[] objekt = writeExternalFormToBytes((Serializable) list);
-        List list2 = (List) readExternalFormFromBytes(objekt);
+        List<E> list2 = (List<E>) readExternalFormFromBytes(objekt);
 
         assertTrue("Both lists are empty",list.size()  == 0);
         assertTrue("Both lists are empty",list2.size() == 0);
     }
 
-    public void testFullListSerialization() 
-    throws IOException, ClassNotFoundException {
-        List list = makeFullList();
+    @SuppressWarnings("unchecked")
+    public void testFullListSerialization() throws IOException, ClassNotFoundException {
+        List<E> list = makeFullCollection();
         int size = getFullElements().length;
         if (!(list instanceof Serializable && isTestSerialization())) return;
-        
+
         byte[] objekt = writeExternalFormToBytes((Serializable) list);
-        List list2 = (List) readExternalFormFromBytes(objekt);
+        List<E> list2 = (List<E>) readExternalFormFromBytes(objekt);
 
         assertEquals("Both lists are same size",list.size(), size);
         assertEquals("Both lists are same size",list2.size(), size);
@@ -1069,19 +1040,21 @@ public abstract class AbstractTestList extends AbstractTestCollection {
      * Compare the current serialized form of the List
      * against the canonical version in CVS.
      */
+    @SuppressWarnings("unchecked")
     public void testEmptyListCompatibility() throws IOException, ClassNotFoundException {
         /**
          * Create canonical objects with this code
         List list = makeEmptyList();
         if (!(list instanceof Serializable)) return;
-        
+
         writeExternalFormToDisk((Serializable) list, getCanonicalEmptyCollectionName(list));
         */
 
         // test to make sure the canonical form has been preserved
-        List list = makeEmptyList();
-        if(list instanceof Serializable && !skipSerializedCanonicalTests() && isTestSerialization()) {
-            List list2 = (List) readExternalFormFromDisk(getCanonicalEmptyCollectionName(list));
+        List<E> list = makeObject();
+        if (list instanceof Serializable && !skipSerializedCanonicalTests()
+                && isTestSerialization()) {
+            List<E> list2 = (List<E>) readExternalFormFromDisk(getCanonicalEmptyCollectionName(list));
             assertTrue("List is empty",list2.size()  == 0);
             assertEquals(list, list2);
         }
@@ -1091,19 +1064,20 @@ public abstract class AbstractTestList extends AbstractTestCollection {
      * Compare the current serialized form of the List
      * against the canonical version in CVS.
      */
+    @SuppressWarnings("unchecked")
     public void testFullListCompatibility() throws IOException, ClassNotFoundException {
         /**
          * Create canonical objects with this code
         List list = makeFullList();
         if (!(list instanceof Serializable)) return;
-        
+
         writeExternalFormToDisk((Serializable) list, getCanonicalFullCollectionName(list));
         */
 
         // test to make sure the canonical form has been preserved
-        List list = makeFullList();
+        List<E> list = makeFullCollection();
         if(list instanceof Serializable && !skipSerializedCanonicalTests() && isTestSerialization()) {
-            List list2 = (List) readExternalFormFromDisk(getCanonicalFullCollectionName(list));
+            List<E> list2 = (List<E>) readExternalFormFromDisk(getCanonicalFullCollectionName(list));
             if (list2.size() == 4) {
                 // old serialized tests
                 return;
@@ -1126,32 +1100,28 @@ public abstract class AbstractTestList extends AbstractTestCollection {
      */
     public BulkTest bulkTestSubList() {
         if (getFullElements().length - 6 < 10) return null;
-        return new BulkTestSubList(this);
+        return new BulkTestSubList<E>(this);
     }
 
+   public static class BulkTestSubList<E> extends AbstractTestList<E> {
 
-   public static class BulkTestSubList extends AbstractTestList {
-
-       private AbstractTestList outer;
+       private AbstractTestList<E> outer;
 
-
-       public BulkTestSubList(AbstractTestList outer) {
+       public BulkTestSubList(AbstractTestList<E> outer) {
            super("");
            this.outer = outer;
        }
 
-
-       public Object[] getFullElements() {
-           List l = Arrays.asList(outer.getFullElements());
-           return l.subList(3, l.size() - 3).toArray();
+       @SuppressWarnings("unchecked")
+       public E[] getFullElements() {
+           List<E> l = Arrays.asList(outer.getFullElements());
+           return (E[]) l.subList(3, l.size() - 3).toArray();
        }
 
-
-       public Object[] getOtherElements() {
+       public E[] getOtherElements() {
            return outer.getOtherElements();
        }
 
-
        public boolean isAddSupported() {
            return outer.isAddSupported();
        }
@@ -1164,32 +1134,28 @@ public abstract class AbstractTestList extends AbstractTestCollection {
            return outer.isRemoveSupported();
        }
 
-
-       public List makeEmptyList() { 
-           return outer.makeFullList().subList(4, 4); 
+       public List<E> makeObject() {
+           return outer.makeFullCollection().subList(4, 4);
        }
 
-
-       public List makeFullList() {
+       public List<E> makeFullCollection() {
            int size = getFullElements().length;
-           return outer.makeFullList().subList(3, size - 3);
+           return outer.makeFullCollection().subList(3, size - 3);
        }
 
-
        public void resetEmpty() {
            outer.resetFull();
-           this.collection = outer.getList().subList(4, 4);
-           this.confirmed = outer.getConfirmedList().subList(4, 4);
+           this.setCollection(outer.getCollection().subList(4, 4));
+           this.setConfirmed(outer.getConfirmed().subList(4, 4));
        }
 
        public void resetFull() {
            outer.resetFull();
-           int size = outer.confirmed.size();
-           this.collection = outer.getList().subList(3, size - 3);
-           this.confirmed = outer.getConfirmedList().subList(3, size - 3);
+           int size = outer.getConfirmed().size();
+           this.setCollection(outer.getCollection().subList(3, size - 3));
+           this.setConfirmed(outer.getConfirmed().subList(3, size - 3));
        }
 
-
        public void verify() {
            super.verify();
            outer.verify();
@@ -1200,7 +1166,6 @@ public abstract class AbstractTestList extends AbstractTestCollection {
        }
    }
 
-
    /**
     *  Tests that a sublist raises a {@link java.util.ConcurrentModificationException ConcurrentModificationException}
     *  if elements are added to the original list.
@@ -1210,29 +1175,27 @@ public abstract class AbstractTestList extends AbstractTestCollection {
        if (!isAddSupported()) return;
 
        resetFull();
-       int size = collection.size();
-       List sub = getList().subList(1, size);
-       getList().add(getOtherElements()[0]);
+       int size = getCollection().size();
+       List<E> sub = getCollection().subList(1, size);
+       getCollection().add(getOtherElements()[0]);
        failFastAll(sub);
 
        resetFull();
-       sub = getList().subList(1, size);
-       getList().add(0, getOtherElements()[0]);
+       sub = getCollection().subList(1, size);
+       getCollection().add(0, getOtherElements()[0]);
        failFastAll(sub);
 
        resetFull();
-       sub = getList().subList(1, size);
-       getList().addAll(Arrays.asList(getOtherElements()));
+       sub = getCollection().subList(1, size);
+       getCollection().addAll(Arrays.asList(getOtherElements()));
        failFastAll(sub);
 
        resetFull();
-       sub = getList().subList(1, size);
-       getList().addAll(0, Arrays.asList(getOtherElements()));
+       sub = getCollection().subList(1, size);
+       getCollection().addAll(0, Arrays.asList(getOtherElements()));
        failFastAll(sub);
-
    }
 
-
    /**
     *  Tests that a sublist raises a {@link java.util.ConcurrentModificationException ConcurrentModificationException}
     *  if elements are removed from the original list.
@@ -1242,45 +1205,43 @@ public abstract class AbstractTestList extends AbstractTestCollection {
        if (!isRemoveSupported()) return;
 
        resetFull();
-       int size = collection.size();
-       List sub = getList().subList(1, size);
-       getList().remove(0);
+       int size = getCollection().size();
+       List<E> sub = getCollection().subList(1, size);
+       getCollection().remove(0);
        failFastAll(sub);
 
        resetFull();
-       sub = getList().subList(1, size);
-       getList().remove(getFullElements()[2]);
+       sub = getCollection().subList(1, size);
+       getCollection().remove(getFullElements()[2]);
        failFastAll(sub);
 
        resetFull();
-       sub = getList().subList(1, size);
-       getList().removeAll(Arrays.asList(getFullElements()));
+       sub = getCollection().subList(1, size);
+       getCollection().removeAll(Arrays.asList(getFullElements()));
        failFastAll(sub);
 
        resetFull();
-       sub = getList().subList(1, size);
-       getList().retainAll(Arrays.asList(getOtherElements()));
+       sub = getCollection().subList(1, size);
+       getCollection().retainAll(Arrays.asList(getOtherElements()));
        failFastAll(sub);
 
        resetFull();
-       sub = getList().subList(1, size);
-       getList().clear();
+       sub = getCollection().subList(1, size);
+       getCollection().clear();
        failFastAll(sub);
    }
 
-
    /**
     *  Invokes all the methods on the given sublist to make sure they raise
     *  a {@link java.util.ConcurrentModificationException ConcurrentModificationException}.
     */
-   protected void failFastAll(List list) {
+   protected void failFastAll(List<E> list) {
        Method[] methods = List.class.getMethods();
        for (int i = 0; i < methods.length; i++) {
            failFastMethod(list, methods[i]);
        }
    }
 
-
    /**
     *  Invokes the given method on the given sublist to make sure it raises
     *  a {@link java.util.ConcurrentModificationException ConcurrentModificationException}.
@@ -1293,13 +1254,13 @@ public abstract class AbstractTestList extends AbstractTestCollection {
     *  @param list  the sublist to test
     *  @param m     the method to invoke
     */
-   protected void failFastMethod(List list, Method m) {
+   protected void failFastMethod(List<E> list, Method m) {
        if (m.getName().equals("equals")) return;
 
-       Object element = getOtherElements()[0];
-       Collection c = Collections.singleton(element);
+       E element = getOtherElements()[0];
+       Collection<E> c = Collections.singleton(element);
 
-       Class[] types = m.getParameterTypes();
+       Class<?>[] types = m.getParameterTypes();
        Object[] params = new Object[types.length];
        for (int i = 0; i < params.length; i++) {
            if (types[i] == Integer.TYPE) params[i] = new Integer(0);
@@ -1328,16 +1289,16 @@ public abstract class AbstractTestList extends AbstractTestCollection {
    public BulkTest bulkTestListIterator() {
        return new TestListIterator();
    }
-    
-   public class TestListIterator extends AbstractTestListIterator {
+
+   public class TestListIterator extends AbstractTestListIterator<E> {
        public TestListIterator() {
            super("TestListIterator");
        }
-        
-       public Object addSetValue() {
+
+       public E addSetValue() {
            return AbstractTestList.this.getOtherElements()[0];
        }
-        
+
        public boolean supportsRemove() {
            return AbstractTestList.this.isRemoveSupported();
        }
@@ -1350,15 +1311,15 @@ public abstract class AbstractTestList extends AbstractTestCollection {
            return AbstractTestList.this.isSetSupported();
        }
 
-       public ListIterator makeEmptyListIterator() {
+       public ListIterator<E> makeEmptyIterator() {
            resetEmpty();
-           return ((List) AbstractTestList.this.collection).listIterator();
+           return AbstractTestList.this.getCollection().listIterator();
        }
 
-       public ListIterator makeFullListIterator() {
+       public ListIterator<E> makeObject() {
            resetFull();
-           return ((List) AbstractTestList.this.collection).listIterator();
+           return AbstractTestList.this.getCollection().listIterator();
        }
    }
-    
+
 }

http://git-wip-us.apache.org/repos/asf/commons-collections/blob/884baf0d/src/test/org/apache/commons/collections/list/TestAbstractLinkedList.java
----------------------------------------------------------------------
diff --git a/src/test/org/apache/commons/collections/list/TestAbstractLinkedList.java b/src/test/org/apache/commons/collections/list/TestAbstractLinkedList.java
index 9943676..ee12658 100644
--- a/src/test/org/apache/commons/collections/list/TestAbstractLinkedList.java
+++ b/src/test/org/apache/commons/collections/list/TestAbstractLinkedList.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.
@@ -20,107 +20,111 @@ import java.util.Arrays;
 
 /**
  * Test case for {@link AbstractLinkedList}.
- * 
+ *
  * @version $Revision$ $Date$
- * 
+ *
  * @author Rich Dougherty
  * @author David Hay
  * @author Phil Steitz
  */
-public abstract class TestAbstractLinkedList extends AbstractTestList {
-    
+public abstract class TestAbstractLinkedList<E> extends AbstractTestList<E> {
+
     public TestAbstractLinkedList(String testName) {
         super(testName);
     }
 
-    //-----------------------------------------------------------------------    
+    //-----------------------------------------------------------------------
+    @SuppressWarnings("unchecked")
     public void testRemoveFirst() {
         resetEmpty();
-        AbstractLinkedList list = (AbstractLinkedList) collection;
+        AbstractLinkedList<E> list = getCollection();
         if (isRemoveSupported() == false) {
             try {
                 list.removeFirst();
             } catch (UnsupportedOperationException ex) {}
-        } 
-        
-        list.addAll( Arrays.asList( new String[]{"value1", "value2"}));
-        assertEquals( "value1", list.removeFirst() );
+        }
+
+        list.addAll(Arrays.asList((E[]) new String[] { "value1", "value2" }));
+        assertEquals("value1", list.removeFirst());
         checkNodes();
-        list.addLast( "value3");
+        list.addLast((E) "value3");
         checkNodes();
-        assertEquals( "value2", list.removeFirst() );
-        assertEquals( "value3", list.removeFirst() );
+        assertEquals("value2", list.removeFirst());
+        assertEquals("value3", list.removeFirst());
         checkNodes();
-        list.addLast( "value4" );
+        list.addLast((E) "value4");
         checkNodes();
-        assertEquals( "value4", list.removeFirst() );
+        assertEquals("value4", list.removeFirst());
         checkNodes();
     }
-    
+
+    @SuppressWarnings("unchecked")
     public void testRemoveLast() {
         resetEmpty();
-        AbstractLinkedList list = (AbstractLinkedList) collection;
+        AbstractLinkedList<E> list = getCollection();
         if (isRemoveSupported() == false) {
             try {
                 list.removeLast();
             } catch (UnsupportedOperationException ex) {}
-        } 
-        
-        list.addAll( Arrays.asList( new String[]{"value1", "value2"}));
-        assertEquals( "value2", list.removeLast() );
-        list.addFirst( "value3");
+        }
+
+        list.addAll(Arrays.asList((E[]) new String[] { "value1", "value2" }));
+        assertEquals("value2", list.removeLast());
+        list.addFirst((E) "value3");
         checkNodes();
-        assertEquals( "value1", list.removeLast() );
-        assertEquals( "value3", list.removeLast() );
-        list.addFirst( "value4" );
+        assertEquals("value1", list.removeLast());
+        assertEquals("value3", list.removeLast());
+        list.addFirst((E) "value4");
         checkNodes();
-        assertEquals( "value4", list.removeFirst() );
+        assertEquals("value4", list.removeFirst());
     }
-    
+
+    @SuppressWarnings("unchecked")
     public void testAddNodeAfter() {
         resetEmpty();
-        AbstractLinkedList list = (AbstractLinkedList) collection;
+        AbstractLinkedList<E> list = getCollection();
         if (isAddSupported() == false) {
             try {
                 list.addFirst(null);
             } catch (UnsupportedOperationException ex) {}
-        } 
-        
-        list.addFirst("value1");
-        list.addNodeAfter(list.getNode(0,false),"value2");
+        }
+
+        list.addFirst((E) "value1");
+        list.addNodeAfter(list.getNode(0, false), (E) "value2");
         assertEquals("value1", list.getFirst());
         assertEquals("value2", list.getLast());
         list.removeFirst();
         checkNodes();
-        list.addNodeAfter(list.getNode(0,false),"value3");
+        list.addNodeAfter(list.getNode(0, false), (E) "value3");
         checkNodes();
         assertEquals("value2", list.getFirst());
         assertEquals("value3", list.getLast());
-        list.addNodeAfter(list.getNode(0, false),"value4");
+        list.addNodeAfter(list.getNode(0, false), (E) "value4");
         checkNodes();
         assertEquals("value2", list.getFirst());
         assertEquals("value3", list.getLast());
         assertEquals("value4", list.get(1));
-        list.addNodeAfter(list.getNode(2, false), "value5");
+        list.addNodeAfter(list.getNode(2, false), (E) "value5");
         checkNodes();
         assertEquals("value2", list.getFirst());
         assertEquals("value4", list.get(1));
         assertEquals("value3", list.get(2));
         assertEquals("value5", list.getLast());
     }
-    
+
+    @SuppressWarnings("unchecked")
     public void testRemoveNode() {
         resetEmpty();
         if (isAddSupported() == false || isRemoveSupported() == false) return;
-        AbstractLinkedList list = (AbstractLinkedList) collection;
-        
-        list.addAll( Arrays.asList( new String[]{"value1", "value2"}));
+        AbstractLinkedList<E> list = getCollection();
+
+        list.addAll(Arrays.asList((E[]) new String[] { "value1", "value2" }));
         list.removeNode(list.getNode(0, false));
         checkNodes();
         assertEquals("value2", list.getFirst());
         assertEquals("value2", list.getLast());
-        list.addFirst("value1");
-        list.addFirst("value0");
+        list.addFirst((E) "value1");
+        list.addFirst((E) "value0");
         checkNodes();
         list.removeNode(list.getNode(1, false));
         assertEquals("value0", list.getFirst());
@@ -131,53 +135,61 @@ public abstract class TestAbstractLinkedList extends AbstractTestList {
         assertEquals("value0", list.getLast());
         checkNodes();
     }
-    
+
+    @SuppressWarnings("unchecked")
     public void testGetNode() {
         resetEmpty();
-        AbstractLinkedList list = (AbstractLinkedList) collection;
+        AbstractLinkedList<E> list = getCollection();
         // get marker
         assertEquals(list.getNode(0, true).previous, list.getNode(0, true).next);
         try {
-            Object obj = list.getNode(0, false);
+            list.getNode(0, false);
             fail("Expecting IndexOutOfBoundsException.");
         } catch (IndexOutOfBoundsException ex) {
             // expected
         }
-        list.addAll( Arrays.asList( new String[]{"value1", "value2"}));
+        list.addAll( Arrays.asList((E[]) new String[]{"value1", "value2"}));
         checkNodes();
-        list.addFirst("value0");
+        list.addFirst((E) "value0");
         checkNodes();
         list.removeNode(list.getNode(1, false));
         checkNodes();
         try {
-            Object obj = list.getNode(2, false);
+            list.getNode(2, false);
             fail("Expecting IndexOutOfBoundsException.");
         } catch (IndexOutOfBoundsException ex) {
             // expected
         }
         try {
-            Object obj = list.getNode(-1, false);
+            list.getNode(-1, false);
             fail("Expecting IndexOutOfBoundsException.");
         } catch (IndexOutOfBoundsException ex) {
             // expected
         }
          try {
-            Object obj = list.getNode(3, true);
+            list.getNode(3, true);
             fail("Expecting IndexOutOfBoundsException.");
         } catch (IndexOutOfBoundsException ex) {
             // expected
-        }       
+        }
     }
-    
+
     protected void checkNodes() {
-        AbstractLinkedList list = (AbstractLinkedList) collection;
+        AbstractLinkedList<E> list = getCollection();
         for (int i = 0; i < list.size; i++) {
             assertEquals(list.getNode(i, false).next, list.getNode(i + 1, true));
             if (i < list.size - 1) {
-                assertEquals(list.getNode(i + 1, false).previous, 
-                    list.getNode(i, false));  
+                assertEquals(list.getNode(i + 1, false).previous,
+                    list.getNode(i, false));
             }
         }
     }
-        
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public AbstractLinkedList<E> getCollection() {
+        return (AbstractLinkedList<E>) super.getCollection();
+    }
 }