10 generics a-4_in_1


Published on

Published in: Technology, News & Politics
1 Like
  • Be the first to comment

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

10 generics a-4_in_1

  1. 1. CS6202: Advanced Topics in Programming Languages Java 5 and Systems Lecture 10/11 : Java Generics and Collections Some features in new language • Overview boxing/unboxing • Subtyping and Wildcard • Comparison and Bounds new form of loop • Declaration and Erasure • Reification and Reflection functions with variable number of arguments • Collections • Iterator, Iterable, Collection generics • Set, Queues, List, Maps • Design Patterns more concurrency features • Other IssuesCS6202 Java Generics 1 CS6202 Java Generics 3 Motiva tion Java 5 : Example Generics is important for: unboxing/boxing generic collection software reuse type safety new optimization (fewer castings) loop Important Principle : “Everything should be as simple as possible but no simpler” function with variable number of arguments assert from Java 1.4CS6202 Java Generics 2 CS6202 Java Generics 4
  2. 2. Example in Java 1.4 Boxing and Unboxing Unboxed types can give better performance Boxed type may be cached for frequent values. 60% slower similar code with Array in Java 1.4CS6202 Java Generics 5 CS6202 Java Generics 7 Generics by Erasure Foreach Loop Works with iterator and is more concise. Java Generics is implemented by erasure: Kept simple – cannot use remove + multiple lists. - simplicity - small - eases evolution (compatibility) List<Integer>, List<String>, List<List<String>> erases to just List compiles to Anomaly : array type very different from parametric type. new String[size] new ArrayList<String>() with the latter losing info on element type.CS6202 Java Generics 6 CS6202 Java Generics 8
  3. 3. Ite ra tor/ Ite rable Inte rfaces Methods with Vara rgs Iterator supports iteration through a collection. Syntactic sugar to support Varargs. varargs Iterable allows an Iterator object to be build. The above is compiled to use array.CS6202 Java Generics 9 CS6202 Java Generics 11 Methods with Vara rgs Outline Arrays can be used to accept a list of elements. • Overview • Subtyping and Wildcard • Comparison and Bounds • Declaration and Erasure • Reification and Reflection • Collections • Iterator, Iterable, Collection • Set, Queues, List, Maps Packing argument for array is cumbersome. • Design Patterns • Other IssuesCS6202 Java Generics 10 CS6202 Java Generics 12
  4. 4. Subtyping and Substitutions Principle Example Subtyping Principle : Copy from one list to another : A variable of a given type may be assigned a value of any subtype of that type. The same applies to arguments. Getting elements : However, it is not sound to have: List<Integer> <: List<Number> But arrays may be covariant: Integer[] <: Number[]CS6202 Java Generics 13 CS6202 Java Generics 15 Cova riant and Contrava riant Subtyping Example Covariant Subtyping : Putting elements : List<Integer> <: List<? extends Number> list of elements of any type that is a subtype of Number Contravariant Subtyping : List<Number> <: List<? super Integer> list of elements of any type that is a supertype of Number Two Bounds? Not legal though plausible. Get and Put Principle : use an extends wildcard when you only get values out of a structure, use a super wildcard when you put values into a structure. Don’t use wildcard when you both get and put.CS6202 Java Generics 14 CS6202 Java Generics 16
  5. 5. Arrays Wildca rd Capture Array subtyping is covariant. We can reverse a list using parametric type or wildcard type? This was designed before generics. Seems irrelevant now : - unsound as it relies on runtime checks - incompatible with Collection - should perhaps deprecate over time. One Solution : Use more of Collection rather than Array - more flexibility - more features/operations - better generics CS6202 Java Generics 17 CS6202 Java Generics 19 Wildca rd vs Type Pa rameter Wildca rd Capture Wildcards may be used if only Objects are being read. Solution is to use a wrapper function with wildcard capture :Collection<?> also stands for Collection<? extends Object>Alternative (more restrictive but safer). This solution is similar to a open/close capture of an existential type. CS6202 Java Generics 18 CS6202 Java Generics 20
  6. 6. Re striction on Wildca rdsWildcards should not appear at Outline (i) top-level of class instance creation (ii) explicit type parameters of generic method • Overview (iii) in supertypes of extends/implements • Subtyping and Wildcard • Comparison and Bounds • Declaration and Erasure • Reification and Reflection • Collections • Iterator, Iterable, Collection • Set, Queues, List, Maps • Design Patterns • Other Issues CS6202 Java Generics 21 CS6202 Java Generics 23 Re striction on Wildca rds Compa rison and BoundsRestriction on supertype of extends/implements x.compareTo(y) method is based on natural ordering x less_than y returns a negative value x equal_to y returns zero x more_than y returns a positive valueRestriction on explicit parameter of methods Consistency with equal x.equals(y) if and only if x.compareTo(y)==0 Main difference with null x.equals(null) returns false permitted x.compareTo(null) throws an exception CS6202 Java Generics 22 CS6202 Java Generics 24
  7. 7. Contract for Compa rable Maximum of a Collection Generic code to find maximum : need to compareAnti-symmetric : with its own type sgn(x.compareTo(y)) == -sgn(y.compareTo(x))Transitivity : if x.compareTo(y)<0 and y.compareTo(z)<0 then x.compareTo(z)<0Congruence : if x.compareTo(y)==0 then A more general signature is based on get/put principle: forall z. sgn(x.compareTo(z)==sgn(x.compareTo(z)) CS6202 Java Generics 25 CS6202 Java Generics 27 Implementing Integer a s Compa rable Fruity ExampleCorrect way : There is some control over what can be compared. cannot compare apple with orangeIncorrect way - overflow problem : can now compare between orange/apple CS6202 Java Generics 26 CS6202 Java Generics 28
  8. 8. Fruity Example Compa ratorRecall : Implement max using Comparator :This works for List<Orange> and List<Fruit>, but oldversion works for only List<Fruit> . Comparator from natural order : CS6202 Java Generics 29 CS6202 Java Generics 31 Compa rator Enumerated Type sAllows additional ad-hoc ordering to be specified : Enumerated type corresponds to a class with a set of final static values. First, an abstract class :Example : shorter string is smaller compare within same enumerated type only CS6202 Java Generics 30 CS6202 Java Generics 32
  9. 9. Enumerated TypeAn instance of enumerated type. Outline • Overview • Subtyping and Wildcard • Comparison and Bounds • Declaration and Erasure • Reification and Reflection • Collections • Iterator, Iterable, Collection • Set, Queues, List, Maps • Design Patterns • Other Issues CS6202 Java Generics 33 CS6202 Java Generics 35 Cova riant Overriding ConstructorsJava 5 can override another if arguments match exactly but the Actual type parameters should be provided :result of overriding method is a subtype of other method. Pair<String,Integer> p = newUseful for clone method : Pair<String,Integer>(“one”,2) class Object { : public Object clone() { … } If you forget, it is a raw type with unchecked warning : } class Point { Pair<String,Integer> p = new Pair(“one”,2) : public Point clone() { return new Point(x,y);} } covariant overriding CS6202 Java Generics 34 CS6202 Java Generics 36
  10. 10. Sta tic MembersStatic methods are independent of any type parameters : Outline • OverviewCell.getCount() // ok • Subtyping and Wildcard • Comparison and BoundsCell<Integer>.getCount() // compile-time error • Declaration and ErasureCell<?>.getCount() // compile-time error • Reification and Reflection • Collections • Iterator, Iterable, Collection • Set, Queues, List, Maps • Design Patterns • Other Issues CS6202 Java Generics 37 CS6202 Java Generics 39 How Erasure Works Reification Refers to an ability to get run-time type information. This is a kind of concretization. Array is reified with its component type, but parameterized types is reified without its component type. Number[] has reified type Number[] ArrayList<Number> has reified type ArrayList CS6202 Java Generics 38 CS6202 Java Generics 40
  11. 11. Reified Type s Reification - ArraysType that is reifiable. More problem : Type that is not reifiable. CS6202 Java Generics 41 CS6202 Java Generics 43 Reification Reification - ArraysAn incorrect code to convert a collection to an array. More problem : not reifiable CS6202 Java Generics 42 CS6202 Java Generics 44
  12. 12. Reification - Arrays Re flectionAlternative using another array + reflection! Reflection is a term to allow a program to examine its own definition. Generics for reflection supports the process using new generic programming techniques. Reflection for generics allow generic types (e.g. type vars, wildcard types) to be captured at runtime. CS6202 Java Generics 45 CS6202 Java Generics 47 Reification - Arrays Generics for Re flectionSolution using a Class – runtime type! A new generic type for Class CS6202 Java Generics 46 CS6202 Java Generics 48
  13. 13. Re flection for Primitive Type Re flection for Gene ric Non-generic reflection example : We cannot use Class<int> as type parameter must be reference type. Use Class<Integer> for int.class instead!Java.lang.reflect.array.newInstances(int.class,size) returns int[] and not Integer[] through a hack!However, int[].class is correctly denoted by Class<int[]> Output : CS6202 Java Generics 49 CS6202 Java Generics 51 Generic Re flection Libra ry Re flection for Gene ric Generic reflection example : newArray Output : newArray Bytecode contains generic type information! CS6202 Java Generics 50 CS6202 Java Generics 52
  14. 14. Re flecting Generic Type sType interface to describe generic type :CS6202 Java Generics 53