Presentation is loading. Please wait.

Presentation is loading. Please wait.

Question of the Day  Move one matchstick to produce a square.

Similar presentations


Presentation on theme: "Question of the Day  Move one matchstick to produce a square."— Presentation transcript:

1 Question of the Day  Move one matchstick to produce a square

2 Question of the Day  Move one matchstick to produce a square

3 CSC 212 – Data Structures

4 Generic Types generics  Starting with 1.5 release, Java uses generics  Include type parameters in class definition  Like methods, parameters can change each time  Fields independent of types can now be written

5 Generic Types  On allocating instance, actual type is specified  Must be reference type or String as actual type  Code runs as if were written using that type  Type used by instance cannot be changed  Type parameter becomes part of variable’s type

6 Generics Before & After Before GenericsAfter Generics

7 Writing Generics

8

9

10

11 See Generics Behave

12 For earth, class written as if T were replaced by Integer

13 See Generics Behave

14 For matchbox, T is Car This can be at same time T is Integer when for earth

15 Using Generics Without GenericsWith Generics Integer i; Car c; Bag n;... n = new Bag(5,“B”); i = ((Integer)n.getData()); c = ((Car)n.getData()); n.setData(c); i = ((Integer)n.getData()); c = ((Car)n.getData()); Integer i; Car c; Bag n; Bag m;... n = new Bag (5,“B”); i = n.getData(); c = n.getData(); n.setData(c); m = new Bag (c, “B”); i = m.getData(); c = m.getData();

16 Using Generics Without GenericsWith Generics Integer i; Car c; Bag n;... n = new Bag(5,“B”); i = ((Integer)n.getData()); c = ((Car)n.getData()); n.setData(c); i = ((Integer)n.getData()); c = ((Car)n.getData()); Integer i; Car c; Bag n; Bag m;... n = new Bag (5,“B”); i = n.getData(); c = n.getData(); n.setData(c); m = new Bag (c, “B”); i = m.getData(); c = m.getData();

17 Using Generics Without GenericsWith Generics Integer i; Car c; Bag n;... n = new Bag(5,“B”); i = ((Integer)n.getData()); c = ((Car)n.getData()); n.setData(c); i = ((Integer)n.getData()); c = ((Car)n.getData()); Integer i; Car c; Bag n; Bag m;... n = new Bag (5,“B”); i = n.getData(); c = n.getData(); n.setData(c); m = new Bag (c, “B”); i = m.getData(); c = m.getData();

18 Using Generics Without GenericsWith Generics Integer i; Car c; Bag n;... n = new Bag(5,“B”); i = ((Integer)n.getData()); c = ((Car)n.getData()); n.setData(c); i = ((Integer)n.getData()); c = ((Car)n.getData()); Integer i; Car c; Bag n; Bag m;... n = new Bag (5,“B”); i = n.getData(); c = n.getData(); n.setData(c); m = new Bag (c, “B”); i = m.getData(); c = m.getData();

19 Using Generics Without GenericsWith Generics Integer i; Car c; Bag n;... n = new Bag(5,“B”); i = ((Integer)n.getData()); c = ((Car)n.getData()); n.setData(c); i = ((Integer)n.getData()); c = ((Car)n.getData()); Integer i; Car c; Bag n; Bag m;... n = new Bag (5,“B”); i = n.getData(); c = n.getData(); n.setData(c); m = new Bag (c, “B”); i = m.getData(); c = m.getData();

20 Using Generics Without GenericsWith Generics Integer i; Car c; Bag n;... n = new Bag(5,“B”); i = ((Integer)n.getData()); c = ((Car)n.getData()); n.setData(c); i = ((Integer)n.getData()); c = ((Car)n.getData()); Integer i; Car c; Bag n; Bag m;... n = new Bag (5,“B”); i = n.getData(); c = n.getData(); n.setData(c); m = new Bag (c, “B”); i = m.getData(); c = m.getData();

21 Using Generics Without GenericsWith Generics Integer i; Car c; Bag n;... n = new Bag(5,“B”); i = ((Integer)n.getData()); c = ((Car)n.getData()); n.setData(c); i = ((Integer)n.getData()); c = ((Car)n.getData()); Integer i; Car c; Bag n; Bag m;... n = new Bag (5,“B”); i = n.getData(); c = n.getData(); n.setData(c); m = new Bag (c, “B”); i = m.getData(); c = m.getData();

22 public class Entry { private MONKEY key; private TYPE value; // And more goes here... } Entry a; Entry b; Entry c; Entry d; Entry e; Can Use Multiple Generic Types

23 public class Entry { private MONKEY key; private TYPE value; // And more goes here... } Entry a; Entry b; Did not specify for each type Entry c; Entry d; Entry e; Can Use Multiple Generic Types

24 public class Entry { private MONKEY key; private TYPE value; // And more goes here... } Entry a; Entry b; Did not specify for each type Entry c; Entry d; Not reference type Entry e; Can Use Multiple Generic Types

25 When To Specify Type  Whenever class name used (except constructors)  Variable declarations: ArrayList hogCount;  Object instantiation: hogCount = new ArrayList ();  Return type for method : private ArrayList transport()  Parameter listing: public void cook(ArrayList fd)  Used as type parameter: ArrayList > bacon;

26  Type cannot be specified instantiating array  Compiler error if type specified during instantiation  Can provide type theory explaining this problem Generics Annoyance

27  Type cannot be specified instantiating array  Can use generics with arrays, but need typecast  Only needed once, use generics after instantiation  Still checks when compiling, so get most benefits public class Farm { private ArrayList [] troughs; private T[] animals; public Farm() { troughs = (ArrayList [])new ArrayList[10]; animals = (T[])new Object[1034821]; } } Generics Annoyance

28 In Case of Unknown Type

29

30 Wildcard in Generic public class ListHolder { private ArrayList myList; public void setList(ArrayList lst){ myList = lst; } public void printListSize() { System.out.println(myList.size()); } public ArrayList getList() { return myList; } }

31 Wildcard in Generic public class ListHolder { private ArrayList myList; public void setList(ArrayList lst){ myList = lst; } public void printListSize() { System.out.println(myList.size()); } public ArrayList getList() { return myList; } } ? matches any reference type (and String )

32 Wildcard in Generic public class ListHolder { private ArrayList myList; public void setList(ArrayList lst){ myList = lst; } public void printListSize() { System.out.println(myList.size()); } public ArrayList getList() { return myList; } } Any ArrayList can be passed in for lst

33 Wildcard in Generic public class ListHolder { private ArrayList myList; public void setList(ArrayList lst){ myList = lst; } public void printListSize() { System.out.println(myList.size()); } public ArrayList getList() { return myList; } } Can call methods as long as missing type not important

34 Wildcard in Generic public class ListHolder { private ArrayList myList; public void setList(ArrayList lst){ myList = lst; } public void printListSize() { System.out.println(myList.size()); } public ArrayList getList() { return myList; } } Legal, but yucky. All type information is lost!

35 Typecasting Explained

36

37

38 Your Turn  Get into your groups and complete activity

39 For Next Lecture


Download ppt "Question of the Day  Move one matchstick to produce a square."

Similar presentations


Ads by Google