SlideShare ist ein Scribd-Unternehmen logo
1 von 14
Downloaden Sie, um offline zu lesen
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 Issues

CS6202                        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.4

CS6202                        Java Generics                 2            CS6202                          Java Generics                               4
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.4




CS6202                         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
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 Issues


CS6202                      Java Generics              10   CS6202                      Java Generics                  12
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
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
Re striction on Wildca rds
Wildcards 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 Bounds
Restriction 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 value




Restriction 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
Contract for Compa rable                                 Maximum of a Collection
                                                         Generic code to find maximum :          need to compare
Anti-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)<0

Congruence :
 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 Example
Correct way :                                            There is some control over what can be compared.




                                                                                              cannot compare apple with orange
Incorrect way - overflow problem :




                                                                                           can now compare between orange/apple



 CS6202                   Java Generics             26    CS6202                     Java Generics                               28
Fruity Example                                             Compa rator
Recall :                                                    Implement max using Comparator :




This works for List<Orange> and List<Fruit>, but old
version works for only List<Fruit> .
                                                            Comparator from natural order :




 CS6202                     Java Generics              29    CS6202                     Java Generics                       31




  Compa rator                                                  Enumerated Type s
Allows 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
Enumerated Type
An 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                                             Constructors
Java 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 = new
Useful 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
Sta tic Members
Static methods are independent of any type parameters :
                                                                     Outline
                                                                          • Overview
Cell.getCount()                  // ok                                    • Subtyping and Wildcard
                                                                          • Comparison and Bounds
Cell<Integer>.getCount() // compile-time error                            • Declaration and Erasure
Cell<?>.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
Reified Type s                                                Reification - Arrays
Type that is reifiable.                                       More problem :




 Type that is not reifiable.




 CS6202                        Java Generics             41    CS6202              Java Generics   43




   Reification                                                   Reification - Arrays
An incorrect code to convert a collection to an array.        More problem :




                           not reifiable




 CS6202                        Java Generics             42    CS6202              Java Generics   44
Reification - Arrays                                 Re flection
Alternative 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 flection
Solution using a Class – runtime type!
                                                     A new generic type for Class




 CS6202                     Java Generics       46    CS6202                      Java Generics                       48
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
Re flecting Generic Type s
Type interface to describe generic type :




CS6202                      Java Generics   53

Weitere ähnliche Inhalte

Was ist angesagt?

Xml Syntax Quick Reference
Xml Syntax Quick ReferenceXml Syntax Quick Reference
Xml Syntax Quick Reference
LiquidHub
 
Xm Lquickref
Xm LquickrefXm Lquickref
Xm Lquickref
LiquidHub
 
Java Reference
Java ReferenceJava Reference
Java Reference
khoj4u
 
C the complete_reference
C the complete_referenceC the complete_reference
C the complete_reference
vinukondakiran
 
O hst-05 design-of_the_occupant_protection_system_mahindra
O hst-05 design-of_the_occupant_protection_system_mahindraO hst-05 design-of_the_occupant_protection_system_mahindra
O hst-05 design-of_the_occupant_protection_system_mahindra
Anand Kumar Chinni
 

Was ist angesagt? (19)

C++ material
C++ materialC++ material
C++ material
 
5장. Execution Engine
5장. Execution Engine5장. Execution Engine
5장. Execution Engine
 
Embedded System Microcontroller Interactive Course using BASCOM-AVR - Lecture3
Embedded System Microcontroller Interactive Course using BASCOM-AVR - Lecture3Embedded System Microcontroller Interactive Course using BASCOM-AVR - Lecture3
Embedded System Microcontroller Interactive Course using BASCOM-AVR - Lecture3
 
Xml Syntax Quick Reference
Xml Syntax Quick ReferenceXml Syntax Quick Reference
Xml Syntax Quick Reference
 
Xm Lquickref
Xm LquickrefXm Lquickref
Xm Lquickref
 
groovy
groovygroovy
groovy
 
JSR-299 (CDI), Weld & the Future of Seam (JavaOne 2010)
JSR-299 (CDI), Weld & the Future of Seam (JavaOne 2010)JSR-299 (CDI), Weld & the Future of Seam (JavaOne 2010)
JSR-299 (CDI), Weld & the Future of Seam (JavaOne 2010)
 
Jstl 8
Jstl 8Jstl 8
Jstl 8
 
Embedded System Microcontroller Interactive Course using BASCOM-AVR - Lecture4
Embedded System Microcontroller Interactive Course using BASCOM-AVR - Lecture4Embedded System Microcontroller Interactive Course using BASCOM-AVR - Lecture4
Embedded System Microcontroller Interactive Course using BASCOM-AVR - Lecture4
 
Java J2EE Training in Chennai, Tambaram
Java J2EE  Training in Chennai, TambaramJava J2EE  Training in Chennai, Tambaram
Java J2EE Training in Chennai, Tambaram
 
Java Reference
Java ReferenceJava Reference
Java Reference
 
Throwing complexity over the wall: Rapid development for enterprise Java (Jav...
Throwing complexity over the wall: Rapid development for enterprise Java (Jav...Throwing complexity over the wall: Rapid development for enterprise Java (Jav...
Throwing complexity over the wall: Rapid development for enterprise Java (Jav...
 
0 E158 C10d01
0 E158 C10d010 E158 C10d01
0 E158 C10d01
 
2장. Runtime Data Areas
2장. Runtime Data Areas2장. Runtime Data Areas
2장. Runtime Data Areas
 
C the complete_reference
C the complete_referenceC the complete_reference
C the complete_reference
 
The Anatomy of Analysis Tools (EVO 2008)
The Anatomy of Analysis Tools (EVO 2008)The Anatomy of Analysis Tools (EVO 2008)
The Anatomy of Analysis Tools (EVO 2008)
 
6장 Thread Synchronization
6장 Thread Synchronization6장 Thread Synchronization
6장 Thread Synchronization
 
O hst-05 design-of_the_occupant_protection_system_mahindra
O hst-05 design-of_the_occupant_protection_system_mahindraO hst-05 design-of_the_occupant_protection_system_mahindra
O hst-05 design-of_the_occupant_protection_system_mahindra
 
Java Programming Guide Quick Reference
Java Programming Guide Quick ReferenceJava Programming Guide Quick Reference
Java Programming Guide Quick Reference
 

Andere mochten auch

Applying Generics
Applying GenericsApplying Generics
Applying Generics
Bharat17485
 
Generic Programming seminar
Generic Programming seminarGeneric Programming seminar
Generic Programming seminar
Gautam Roy
 

Andere mochten auch (20)

Applying Generics
Applying GenericsApplying Generics
Applying Generics
 
Generic Programming seminar
Generic Programming seminarGeneric Programming seminar
Generic Programming seminar
 
Data structure circular list
Data structure circular listData structure circular list
Data structure circular list
 
Data structures1
Data structures1Data structures1
Data structures1
 
It6601 mobile computing unit 4 questions
It6601 mobile computing unit 4 questionsIt6601 mobile computing unit 4 questions
It6601 mobile computing unit 4 questions
 
Stack in Sata Structure
Stack in Sata StructureStack in Sata Structure
Stack in Sata Structure
 
IT6601 Mobile Computing
IT6601 Mobile  Computing IT6601 Mobile  Computing
IT6601 Mobile Computing
 
Double linked list
Double linked listDouble linked list
Double linked list
 
Data Structure (Circular Linked List)
Data Structure (Circular Linked List)Data Structure (Circular Linked List)
Data Structure (Circular Linked List)
 
IT6601 MOBILE COMPUTING UNIT1
IT6601 MOBILE COMPUTING UNIT1IT6601 MOBILE COMPUTING UNIT1
IT6601 MOBILE COMPUTING UNIT1
 
IT6601 MOBILE COMPUTING
IT6601 MOBILE COMPUTINGIT6601 MOBILE COMPUTING
IT6601 MOBILE COMPUTING
 
It6601 mobile computing unit 5
It6601 mobile computing unit 5It6601 mobile computing unit 5
It6601 mobile computing unit 5
 
It6601 mobile computing unit 3
It6601 mobile computing unit 3It6601 mobile computing unit 3
It6601 mobile computing unit 3
 
IT6601 MOBILE COMPUTING
IT6601 MOBILE COMPUTINGIT6601 MOBILE COMPUTING
IT6601 MOBILE COMPUTING
 
IT6601 MOBILE COMPUTING
IT6601 MOBILE COMPUTINGIT6601 MOBILE COMPUTING
IT6601 MOBILE COMPUTING
 
It6601 mobile computing unit 4
It6601 mobile computing unit 4It6601 mobile computing unit 4
It6601 mobile computing unit 4
 
It6601 mobile computing unit2
It6601 mobile computing unit2It6601 mobile computing unit2
It6601 mobile computing unit2
 
Linked list
Linked listLinked list
Linked list
 
IT6601 MOBILE COMPUTING
IT6601 MOBILE COMPUTINGIT6601 MOBILE COMPUTING
IT6601 MOBILE COMPUTING
 
DSA-2012-Lect00
DSA-2012-Lect00DSA-2012-Lect00
DSA-2012-Lect00
 

Ähnlich wie 10 generics a-4_in_1

Polyglot Plugin Programming
Polyglot Plugin ProgrammingPolyglot Plugin Programming
Polyglot Plugin Programming
Atlassian
 
Tutorial visitor
Tutorial visitorTutorial visitor
Tutorial visitor
Wei Wang
 

Ähnlich wie 10 generics a-4_in_1 (20)

Scala: An experience report
Scala: An experience reportScala: An experience report
Scala: An experience report
 
Polyglot Plugin Programming
Polyglot Plugin ProgrammingPolyglot Plugin Programming
Polyglot Plugin Programming
 
Protecting Source Code
Protecting Source CodeProtecting Source Code
Protecting Source Code
 
Java, Ruby & Rails
Java, Ruby & RailsJava, Ruby & Rails
Java, Ruby & Rails
 
Adapter 2pp
Adapter 2ppAdapter 2pp
Adapter 2pp
 
Introduction of Java 8 with emphasis on Lambda Expressions and Streams
Introduction of Java 8 with emphasis on Lambda Expressions and StreamsIntroduction of Java 8 with emphasis on Lambda Expressions and Streams
Introduction of Java 8 with emphasis on Lambda Expressions and Streams
 
Getting ready to java 8
Getting ready to java 8Getting ready to java 8
Getting ready to java 8
 
Learning java
Learning javaLearning java
Learning java
 
Getting ready to java 8
Getting ready to java 8Getting ready to java 8
Getting ready to java 8
 
Cascalog at Strange Loop
Cascalog at Strange LoopCascalog at Strange Loop
Cascalog at Strange Loop
 
Session 38 - Core Java (New Features) - Part 1
Session 38 - Core Java (New Features) - Part 1Session 38 - Core Java (New Features) - Part 1
Session 38 - Core Java (New Features) - Part 1
 
Scala-Ls1
Scala-Ls1Scala-Ls1
Scala-Ls1
 
Java 8
Java 8Java 8
Java 8
 
What's new in Java 8
What's new in Java 8What's new in Java 8
What's new in Java 8
 
The latest features coming to Java 12
The latest features coming to Java 12The latest features coming to Java 12
The latest features coming to Java 12
 
Lambdas in Java 8
Lambdas in Java 8Lambdas in Java 8
Lambdas in Java 8
 
JRuby - Programmer's Best Friend on JVM
JRuby - Programmer's Best Friend on JVMJRuby - Programmer's Best Friend on JVM
JRuby - Programmer's Best Friend on JVM
 
Core java
Core javaCore java
Core java
 
Tutorial visitor
Tutorial visitorTutorial visitor
Tutorial visitor
 
Section 6 collections generics
Section 6   collections genericsSection 6   collections generics
Section 6 collections generics
 

Kürzlich hochgeladen

EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 

Kürzlich hochgeladen (20)

Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 

10 generics a-4_in_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 Issues CS6202 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.4 CS6202 Java Generics 2 CS6202 Java Generics 4
  • 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.4 CS6202 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. 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 Issues CS6202 Java Generics 10 CS6202 Java Generics 12
  • 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. 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. Re striction on Wildca rds Wildcards 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 Bounds Restriction 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 value Restriction 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. Contract for Compa rable Maximum of a Collection Generic code to find maximum : need to compare Anti-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)<0 Congruence : 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 Example Correct way : There is some control over what can be compared. cannot compare apple with orange Incorrect way - overflow problem : can now compare between orange/apple CS6202 Java Generics 26 CS6202 Java Generics 28
  • 8. Fruity Example Compa rator Recall : Implement max using Comparator : This works for List<Orange> and List<Fruit>, but old version works for only List<Fruit> . Comparator from natural order : CS6202 Java Generics 29 CS6202 Java Generics 31 Compa rator Enumerated Type s Allows 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. Enumerated Type An 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 Constructors Java 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 = new Useful 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. Sta tic Members Static methods are independent of any type parameters : Outline • Overview Cell.getCount() // ok • Subtyping and Wildcard • Comparison and Bounds Cell<Integer>.getCount() // compile-time error • Declaration and Erasure Cell<?>.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. Reified Type s Reification - Arrays Type that is reifiable. More problem : Type that is not reifiable. CS6202 Java Generics 41 CS6202 Java Generics 43 Reification Reification - Arrays An incorrect code to convert a collection to an array. More problem : not reifiable CS6202 Java Generics 42 CS6202 Java Generics 44
  • 12. Reification - Arrays Re flection Alternative 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 flection Solution using a Class – runtime type! A new generic type for Class CS6202 Java Generics 46 CS6202 Java Generics 48
  • 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. Re flecting Generic Type s Type interface to describe generic type : CS6202 Java Generics 53