| CSC448: Type Checking Revisited: Generic Polymorphism III [113/133] | ![]() ![]() ![]() |
To confuse the issue, Java v1.5 also includes generic polymorphism, so we can write:
<A> List<A> reverse2 (List<A> l)
{
List<A> result = new ArrayList<A> ();
Iterator<A> iter = l.iterator ();
while (iter.hasNext ()) {
A a = iter.next ();
result.add (a);
}
return result;
}
Code to invoke the two reverse methods:
void test ()
{
List<String> list = new ArrayList<String> ();
list.add ("the"); list.add ("rain"); list.add ("in"); list.add ("Spain");
list.add ("falls"); list.add ("mainly"); list.add ("on"); list.add ("the"); list.add ("plain");
List l1a = reverse1 (list);
Object o1 = l1a.get (0);
List<String> l1b = reverse1 (list);
String s1b = l1b.get (0);
// Next line fails to typecheck:
// String s1c = reverse1 (list).get (0);
List l2a = reverse2 (list);
Object o2 = l2a.get (0);
List<String> l2b = reverse2 (list);
String s2b = l2b.get (0);
String s2c = reverse2 (list).get (0);
// Type inference means that we don't have to type:
List<String> l2d = this.<String>reverse2 (list);
}