Parametric Polymorphism in Java
Java Generics KLM
Department of Computer Science and Information Systems Birkbeck, University of London keith@dcs.bbk.ac.uk
Parametric Polymorphism in Java Java Generics KLM Department of - - PowerPoint PPT Presentation
Parametric Polymorphism in Java Java Generics KLM Department of Computer Science and Information Systems Birkbeck, University of London keith@dcs.bbk.ac.uk Overview Java Generics Motivation Parameterised classes Parameterised methods
Department of Computer Science and Information Systems Birkbeck, University of London keith@dcs.bbk.ac.uk
KLM (Birkbeck DCS) Parametric Polymorphism in Java 2 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 3 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 4 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 5 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 6 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 7 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 8 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 9 / 51
public abstract class Sum { public static int sum_0_1() { return (0 + 1); } public static int sum_15_22() { return (15 + 22); } } public class SumMain { public static void main(String[] args) { int j = Sum.sum_0_1(); // ... int k = Sum.sum_15_22(); } }
KLM (Birkbeck DCS) Parametric Polymorphism in Java 10 / 51
public abstract class NewSum { public static int sum(int m, int n) { return (m + n); } } public class NewSumMain { public static void main(String[] args) { int j = NewSum.sum(0, 1); // ... int k = NewSum.sum(15, 22); } }
KLM (Birkbeck DCS) Parametric Polymorphism in Java 11 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 12 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 13 / 51
public class OldBox { Object data; public OldBox(Object data) { this.data = data; } public Object getData() { return data; } }
KLM (Birkbeck DCS) Parametric Polymorphism in Java 14 / 51
public class Box<T> { T data; public Box(T data) { this.data = data; } public T getData() { return data; } }
KLM (Birkbeck DCS) Parametric Polymorphism in Java 15 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 16 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 17 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 18 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 19 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 20 / 51
public class Box<E> { E data; public Box(E data) { this.data = data; } public E getData() { return data; } public void copyFrom(Box<E> b) { this.data = b.getData(); } }
KLM (Birkbeck DCS) Parametric Polymorphism in Java 21 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 22 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 23 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 24 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 25 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 26 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 27 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 28 / 51
public class Foo { //Foo is not parameterised public <T> T aMethod(T x) { // will not compile without <T> // to indicate that this is a // parameterised method. return x; } public static void main(String[] args) { Foo foo = new Foo(); int k = foo.aMethod(5); String s = foo.aMethod("abc"); } }
KLM (Birkbeck DCS) Parametric Polymorphism in Java 29 / 51
public class Bar<T> { //Bar is parameterized public T aMethod(T x) { return x; } public static void main(String[] args) { Bar<Integer> bar = new Bar<Integer>(); int k = bar.aMethod(5); String s = bar.aMethod("abc"); //Compilation error here } }
KLM (Birkbeck DCS) Parametric Polymorphism in Java 30 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 31 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 32 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 33 / 51
//We can rewrite copyFrom() so that it can take a box //that contains data that is a subclass of E and //store it to a Box<E> object public class BoxUpper<E> { E data; public void copyFrom(Box<? extends E> b) { this.data = b.getData(); } }
KLM (Birkbeck DCS) Parametric Polymorphism in Java 34 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 35 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 36 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 37 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 38 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 39 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 40 / 51
1 The type on the left hand side of the assignment does not
2 The compiler can do additional type checks because it knows
KLM (Birkbeck DCS) Parametric Polymorphism in Java 41 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 42 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 43 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 44 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 45 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 46 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 47 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 48 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 49 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 50 / 51
KLM (Birkbeck DCS) Parametric Polymorphism in Java 51 / 51