Java Generics -- an introduction. Based on
|
|
- Alexina White
- 6 years ago
- Views:
Transcription
1 Java Generics -- an introduction Based on
2 Generics vs. Templates Templates in C++ are compiled into unique code based on the types passed in as template parameters. Map<int,string> instantiates code that takes an int and a string this takes time, but it is ok because it is done at compile time, not run time Generics in Java create a class that takes many types. The type of the reference allows the compiler to often (but not always) checked at runtime. Generic classes can be created at javac time This does cause interesting issues, discussed later.
3 Why use generics Because Java has an Object class that all other classes derive from, one could just write containers of objects. However, doing this disables type checking at compile time increases the use of casts Does not allow the implementation of generic algorithms based on Interface or Base class functionality
4 Why use generics Cast needed with non-generic container of objects: List list = new ArrayList(); list.add("hello"); String s = (String) list.get(0); No cast needed when using generics: List<String> list = new ArrayList<String>(); list.add("hello"); String s = list.get(0); // no cast + type known inside of the generic code and can used methods based on the type
5 Consider the code: public class Box { private Object object; Generic types public void set(object object) { this.object = object; public Object get() { return object; Since an Object is taken, any class type can be put into the Box, and get( ) can return any class type. Thus, the code: Box box = new Box( ); box.set((object) new String( hello )); Integer i = (Integer) box.get( ); cannot be checked at compile time -- because the compiler only knows the class takes an Object. It will cause a runtime error instead of a compile time error.
6 Consider the code: public class Box<T> { // T stands for "Type" private T t; Generic types public void set(t t) { this.t = t; public T get() { return t; Now an object of type T is taken, and the code: Box<String> box = new Box<String>( ); box.set(new String( hello )); Integer i = (Integer) box.get( ); can be checked and because the reference type says a String will go into the box.
7 Conventions and notation Commonly used parameter names: E - Element (used extensively by the Java Collections Framework) K - Key N - Number T - Type V - Value S,U, etc. - 2nd, 3rd,... types Terminology: the T in Foo<T> is a type parameter and the String in Foo<String> f is a type argument. I.e., as with functions, the thing defining what will be passed in is a parameter, and the thing defining what is passed in is an argument.
8 Raw types A raw type is the name of a generic class or interface without any type arguments. To create a parameterized type of Box<T>, you supply an actual type argument for the formal type parameter T: Box<Integer> intbox = new Box<>(); If the actual type argument is omitted, you create a raw type of Box<T>: Box rawbox = new Box(); Assigning a raw type to a parameterized type gives a warning: Box<Integer> intbox = rawbox; // warning: // unchecked conversion // A runtime check is performed This is allowed to enable backwards compatibility with, e.g., code that uses pre-generics collections classes. The type T is treated as Object.
9 Generic methods Java allows methods to have parameterized types. public class Util { public static <K, V> boolean compare Pair<K, V> p1, Pair<K, V> p2) { return p1.getkey().equals(p2.getkey()) && p1.getvalue().equals(p2.getvalue()); It would be called as boolean same = Util.<Integer, String>compare(p1, p2);
10 Bounded type parameters Java allows you to restrict the types of arguments passed to a template public class Box<T> { private T t; public void set(t t) {this.t = t; public T get() {return t; public <U extends Number> void inspect(u u){ System.out.println("T: " + t.getclass().getname()); System.out.println("U: " + u.getclass().getname()); public static void main(string[] args) { Box<Integer> integerbox = new Box<Integer>(); integerbox.set(new Integer(10)); integerbox.inspect("some text"); // error: this is a String! Can also say: <T extends B1 & B2 & B3> to have multiple bounds on a parameter. Classes must be listed before interfaces in the list. Bounded types allow better compile time type checking by minimizing the types a method/class takes.
11 Does not compile because > only defined for primitives public static <T> int countgreaterthan(t[] anarray, T elem) { int count = 0; for (T e : anarray) if (e > elem) // compiler error ++count; return count; Bound T with the Comparable<T> interface and use compareto and it is ok. public static <T extends Comparable<T>> int countgreaterthan(t[] anarray, T elem) { int count = 0; for (T e : anarray) if (e.compareto(elem) > 0) ++count; return count; Where Comparable<T> is defined as: public interface Comparable<T> { public int compareto(t o); Using bounded type parameters
12 Generics, Inheritance and Subtypes This is legal because Integer ISA Object Object someobject = new Object(); Integer someinteger = new Integer(10); someobject = someinteger; // OK This is legal because Integer ISA Number and Double ISA Number Box<Number> box = new Box<Number>(); box.add(new Integer(10)); // OK box.add(new Double(10.1)); // OK What arguments does public void boxtest(box<number> n) accept? You cannot pass in a Box<Integer> or a Box<Double>. Although Integer ISA Number and Double ISA Number, Box<Integer> ISNOTA Box<Number>
13 How do you subtype generic classes? // PayloadList<E,P> ISA List<E> interface PayloadList<E,P> extends List<E> { void setpayload(int index, P val);... // PayloadList<String,String> ISA List<String> // PayloadList<String,Integer> ISA List<String> // PayloadList<String,Exception> ISA List<String> // PayloadList<Integer, Exception> ISA List<Integer>
14 Type inference is a Java compiler's ability to look at each method invocation and corresponding declaration to determine the type argument (or arguments) that make the invocation applicable. For example, in the following Java determines that the second argument passed to Pick is of type Serializable. static <T> T pick(t a1, T a2) { return a2; Serializable s = pick("d", new ArrayList<String>()); Now, consider the method public static <U> void addbox(u u, java.util.list<box<u>> boxes) It can be called as BoxDemo.<Integer>addBox(Integer.valueOf(10), listofintegerboxes); or as Type inference BoxDemo.addBox(Integer.valueOf(20), listofintegerboxes); In the second case, Java will infer from the Integer first argument that the witness is Integer because the first argument and the witness have the same type in the declaration.
15 Given the declaration Map<String, List<String>> mymap = new HashMap<String, List<String>>(); you could declare this using Map<String, List<String>> mymap = new HashMap<>(); because Java knows how the Map<...> parameters are related to the HashMap type parameters. You must use the < > (diamond) or risk getting an unchecked type error. Now consider the class class MyClass<X> { <T> MyClass(T t) { //... Given the declaration new MyClass<Integer>("") More type inference Java will infer the value for T as String because that is the type of the constructor call.
16 More type inference - target types Given the declaration static <T> List<T> emptylist(); and the assignment List<String> listone = Collections.emptyList(); This statement is expecting an instance of List<String>; this data type is the target type. Because the method emptylist returns a value of type List<T>, the compiler infers that the type argument T must be the value String. This works in both Java SE 7 and 8. Alternatively, you could use a type witness and specify the value of T as follows: List<String> listone = Collections.<String>emptyList(); This processstringlist(collections.emptylist()); however, will not compile and will give the error List<Object> cannot be converted to List<String> Because no return target type is specified and Java assumes Object. To allow it to compile we must use a witness, i.e., processstringlist(collections.<string>emptylist());
17 The? can be used to specify an unknown type Wildcards Upper Bound Wildcards: To declare an upper-bounded wildcard, use the wildcard character ('?'), followed by the extends keyword, followed by its upper bound. Note that, in this context, extends is used in a general sense to mean either "extends" (as in classes) or "implements" (as in interfaces). public static void process(list<? extends Foo> list) { /*... */ Matches any type that is Foo or extends Foo. Unbounded Wildcards: The method public static void printlist(list<object> list) { for (Object elem : list) System.out.println(elem + " "); System.out.println(); only prints a list of Objects. To print any list, we need to use unbounded wildcards, i.e., public static void printlist(list<?> list) { for (Object elem: list) System.out.print(elem + " "); System.out.println(); This will take a list of anything type of object, and since tostring( ) is defined for all objects (a class inherits Object s tostring( ) if the class doesn t define one.)
18 Wildcards Say you want to write a method that puts Integer objects into a list. To maximize flexibility, you would like the method to work on List<Integer>, List<Number>, and List<Object> anything that can hold Integer values. To write the method that works on lists of Integer and the supertypes of Integer, such as Integer, Number, and Object, you would specify List<? super Integer>. The term List<Integer> is more restrictive than List<? super Integer> because the former matches a list of type Integer only, whereas the latter matches a list of any type that is a supertype (base class) of Integer. The following code adds the numbers 1 through 10 to the end of a list: public static void addnumbers(list<? super Integer> list) { for (int i = 1; i <= 10; i++) { list.add(i);
19 Type Erasure Generics were introduced to the Java language to provide tighter type checks at compile time and to support generic programming. To implement generics, the javac compiler applies type erasure to: Replace all type parameters in generic types with their bounds or Object if the type parameters are unbounded. The produced bytecode, therefore, contains only ordinary classes, interfaces, and methods. Insert type casts if necessary to preserve type safety. Generate bridge methods to preserve polymorphism in extended generic types. Type erasure ensures that no new classes are created for parameterized types; consequently, generics incur no runtime overhead.
20 public class Node<T> { private T data; private Node<T> next; Type Erasure public Node(T data, Node<T> next) this.data = data; this.next = next; public T getdata() { return data; //... unbounded public class Node { private Object data; private Node next; parameter public Node(Object data, Node next) { this.data = data; this.next = next; public Object getdata() { return data; //...
21 public class Node<T extends Comparable<T>> { private T data; private Node<T> next; public Node(T data, Node<T> next) { this.data = data; this.next = next; public T getdata() { return data; //... public class Node { Type Erasure bounded parameter private Comparable data; private Node next; public Node(Comparable data, Node next) { this.data = data; this.next = next; public Comparable getdata() { return data; //...
22 public class Node<T> { public T data; public Node(T data) { this.data = data; Effects of type public void setdata(t data) { System.out.println("Node.setData"); this.data = data; Intent is for MyNode to extend Node, and MyNode s setdata to override Node s Node MyNode mn = new MyNode(5); Node n = mn; n.setdata( Hello"); Integer x = mn.data; public class MyNode extends Node<Integer> { public MyNode(Integer data) { super(data); erasure public void setdata(integer data) { System.out.println("MyNode.setData"); super.setdata(data); Consider the code: // Node is a raw type - compiler gives an // unchecked warning // Causes a ClassCastException // to be thrown.
23 public class Node<T> { public T data; public Node(T data) { this.data = data; Effects of type public void setdata(t data) { System.out.println("Node.setData"); this.data = data; Intent is for MyNode to extend Node, and MyNode s setdata to override Node s Node public class MyNode extends Node<Integer> { public MyNode(Integer data) { super(data); erasure public void setdata(integer data) { System.out.println("MyNode.setData"); super.setdata(data); Consider the code (after type erasure): MyNode mn = new MyNode(5); Node n = (MyNode)mn; // A raw type - unchecked warning n.setdata("hello"); Integer x = (String)mn.data; // ClassCastException to be thrown.
24 Why the class cast exception? public class Node<T> { public T data; public Node(T data) { this.data = data; public void setdata(t data) { System.out.println("Node.setData"); this.data = data; After type erasure public class Node { public Object data; public Node(Object data) { this.data = data; public void setdata(object data) { System.out.println("Node.setData"); this.data = data;
25 Why the class cast exception? public class MyNode extends Node<Integer> { public MyNode(Integer data) { super(data); public void setdata(integer data) { System.out.println("MyNode.setData"); super.setdata(data); Node s setdata setdata(object) public class MyNode extends Node { public MyNode(Integer data) { super(data); setdata(integer) public void setdata(integer data) { System.out.println("MyNode.setData"); super.setdata(data); Node s setdata is not overriden!
26 Why the class cast exception? MyNode mn = new MyNode(5); Node n = (MyNode)mn; // A raw type - unchecked warning n.setdata("hello"); Integer x = (String)mn.data; // ClassCastException to be thrown. Node s setdata MyNode s setdata setdata(object) setdata(integer) n.setdata("hello"); causes the method setdata(object) to be executed on the object of class MyNode. (The MyNode class inherited setdata(object) from Node.) In the body of setdata(object), the data field of the object referenced by n is assigned to a String. The data field of that same object, referenced via mn, can be accessed and is expected to be an Integer (since mn is a MyNode which is a Node<Integer>. Trying to assign a String to an Integer causes a ClassCastException from a cast inserted at the assignment by a Java compiler.
27 Restrictions on Generics 1. Cannot Instantiate Generic Types with Primitive Types 2. Cannot Create Instances of Type Parameters 3. Cannot Declare Static Fields Whose Types are Type Parameters 4. Cannot Use Casts or instanceof With Parameterized Types 5. Cannot Create Arrays of Parameterized Types 6. Cannot Create, Catch, or Throw Objects of Parameterized Types 7. Cannot Overload a Method Where the Formal Parameter Types of Each Overload Erase to the Same Raw Type Cannot Instantiate Generic Types with Primitive Types class Pair<K, V> {... Pair<int, char> p = new Pair<>(8, 'a'); // compile-time error Pair<Integer, Character> p = new Pair<>(8, 'a'); // autoboxes Pair<Integer, Character> p = new Pair<>(Integer.valueOf(8), new Character('a'));
28 Restrictions on Generics Cannot Create Instances of Type Parameters public static <E> void append(list<e> list) { E elem = new E(); // compile-time error list.add(elem); As a workaround, you can create an object of a type parameter through reflection: public static <E> void append(list<e> list, Class<E> cls) throws Exception { E elem = cls.newinstance(); // OK list.add(elem);
29 Restrictions on Generics Cannot Declare Static Fields Whose Types are Type Parameters A static field is shared across all objects of the class. Consider the following class: public class MobileDevice<T> { private static T os; //... If static fields of type parameters were allowed, then the following code would be ambiguous: MobileDevice<Smartphone> phone = new MobileDevice<>(); MobileDevice<Pager> pager = new MobileDevice<>(); MobileDevice<TabletPC> pc = new MobileDevice<>(); Because the static field os is shared by phone, pager, and pc, what is the actual type of os? It cannot be Smartphone, Pager, and TabletPC at the same time. You cannot, therefore, create static fields of type parameters.
Generics. Chapter Contents
Generics Chapter Contents Why Use Generics? 14 Generic Types 14 Generic Methods 170 Bounded Type Parameters 171 Generics, Inheritance, and Subtypes 173 Type Inference 17 Wildcards 179 Type Erasure 188
More informationMarcin Luckner Warsaw University of Technology Faculty of Mathematics and Information Science
Marcin Luckner Warsaw University of Technology Faculty of Mathematics and Information Science mluckner@mini.pw.edu.pl http://www.mini.pw.edu.pl/~lucknerm } Generics allow the programer to create an universal
More informationWhat are Generics? e.g. Generics, Generic Programming, Generic Types, Generic Methods
What are Generics? e.g. Generics, Generic Programming, Generic Types, Generic Methods 6 Defining the idea Behind Java Generics Data Types are now used as TypeParameters 7 Defining the idea Behind Java
More informationGenerics method and class definitions which involve type parameters.
Contents Topic 07 - Generic Programming I. Introduction Example 1 User defined Generic Method: printtwice(t x) Example 2 User defined Generic Class: Pair Example 3 using java.util.arraylist II. Type
More informationWhy Use Generics? Generic types Generic methods Bounded type parameters Generics, Inheritance, and Subtypes Wildcard types
Why Use Generics? Generic types Generic methods Bounded type parameters Generics, Inheritance, and Subtypes Wildcard types generics enable types (classes and interfaces) to be parameters when defining
More informationAdvanced Programming Generics Collections
Advanced Programming Generics Collections The Context Create a data structure that stores elements: a stack, a linked list, a vector a graph, a tree, etc. What data type to use for representing the elements
More informationCSC 172 Data Structures and Algorithms. Lecture 3 Spring 2018 TuTh 3:25 pm 4:40 pm
CSC 172 Data Structures and Algorithms Lecture 3 Spring 2018 TuTh 3:25 pm 4:40 pm Agenda Administrative aspects Java Generics Chapter 1 ADMINISTRATIVE ASPECTS Workshops Workshops Workshops begin on this
More informationIntroducing Generics
Generics Introducing Generics Generics allow reference types (classes, interfaces, and array types) and methods to be parameterized with type information. An abstract data type (ADT) defines both the types
More informationCSE 331 Software Design and Implementation. Lecture 14 Generics 2
CSE 331 Software Design and Implementation Lecture 14 Generics 2 Zach Tatlock / Spring 2018 Big picture Last time: Generics intro Subtyping and Generics Using bounds for more flexible subtyping Using wildcards
More informationCSE Lecture 7: Polymorphism and generics 16 September Nate Nystrom UTA
CSE 3302 Lecture 7: Polymorphism and generics 16 September 2010 Nate Nystrom UTA 2 Polymorphism poly = many morph = shape Allow a variable to contain values with different types 3 Subtype polymorphism
More informationCSE 331 Software Design and Implementation. Lecture 14 Generics 2
CSE 331 Software Design and Implementation Lecture 14 Generics 2 James Wilcox / Winter 2016 Hi, I m James! Big picture Last time: Generics intro Subtyping and Generics Using bounds for more flexible subtyping
More informationCS61B Lecture #25: Java Generics. Last modified: Thu Oct 19 19:36: CS61B: Lecture #25 1
CS61B Lecture #25: Java Generics Last modified: Thu Oct 19 19:36:29 2017 CS61B: Lecture #25 1 The Old Days Java library types such as List didn t used to be parameterized. All Lists were lists of Objects.
More informationSoftware Engineering. Prof. Agostino Poggi
Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma Software Engineering Generics Prof. Agostino Poggi public class ListOfIntegers { //... fields...
More informationCS61B Lecture #25: Java Generics. Last modified: Thu Oct 18 21:04: CS61B: Lecture #25 1
CS61B Lecture #25: Java Generics Last modified: Thu Oct 18 21:04:53 2018 CS61B: Lecture #25 1 The Old Days Java library types such as List didn t used to be parameterized. All Lists were lists of Objects.
More informationAnnouncements. Lecture 15 Generics 2. Announcements. Big picture. CSE 331 Software Design and Implementation
CSE 331 Software Design and Implementation Lecture 15 Generics 2 Announcements Leah Perlmutter / Summer 2018 Announcements Quiz 5 is due tomorrow Homework 6 due tomorrow Section tomorrow! Subtyping now
More informationCSE 331 Software Design and Implementation. Lecture 15 Generics 2
CSE 331 Software Design and Implementation Lecture 15 Generics 2 Leah Perlmutter / Summer 2018 Announcements Announcements Quiz 5 is due tomorrow Homework 6 due tomorrow Section tomorrow! Subtyping now
More informationGenerics, Type Safety, and Dynamic Data Structures
Generics, Type Safety, and Dynamic Data Structures 1 Reminders No classes, labs, recitations next week (gobble gobble) Consulting hours Monday only Project 8 (the final one!) is out start early Milestone
More informationCOURSE 5 PROGRAMMING III OOP. JAVA LANGUAGE
COURSE 5 PROGRAMMING III OOP. JAVA LANGUAGE PREVIOUS COURSE CONTENT Generics Defining a generic Run-time behavior Collections List Set Map COUSE CONTENT Collections Utilities classes Aggregate Operations
More informationGenerics. Computer Science and Engineering College of Engineering The Ohio State University. Lecture 10
Generics Computer Science and Engineering College of Engineering The Ohio State University Lecture 10 A Simple Component Client-side view: Pencil interface Pencil { String tostring(); void setcolor(colors
More informationCS108, Stanford Handout #8. Java Generics
CS108, Stanford Handout #8 Fall, 2007-08 Nick Parlante Java Generics Java generics (added in version 5) are a mixed bag. Some uses of generics are simple to understand and make the code cleaner. They are
More informationGenerics and collections
Generics From JDK 1.5.0 They are similar to C++ templates They allow to eliminate runtime exceptions related to improper casting (ClassCastException) Traditional approach public class Box { private Object
More informationCOMP6700/2140 Generic Types
COMP6700/2140 Generic Types Alexei B Khorev and Josh Milthorpe Research School of Computer Science, ANU 24 March 2017 Alexei B Khorev and Josh Milthorpe (RSCS, ANU) COMP6700/2140 Generic Types 24 March
More informationCS61B Lecture #24. Today: Java support for generic programming. Readings for today: A Java Reference, Chapter 10.
CS61B Lecture #24 Today: Java support for generic programming Readings for today: A Java Reference, Chapter 10. Readings for Monday: Data Structures, 6.4. Last modified: Fri Oct 19 19:33:03 2012 CS61B:
More informationCS61B Lecture #23. Today: Java support for generic programming. Readings for today: A Java Reference, Chapter 10.
CS61B Lecture #23 Announcements: Josh s office hours are now back in his office. HW6 now due Saturday. Partial solar eclipse tomorrow, starting at 1:52PM. Next one in August, 2017. See http://www.timeanddate.com/eclipse/list.html
More informationCSE 331. Generics (Parametric Polymorphism)
CSE 331 Generics (Parametric Polymorphism) slides created by Marty Stepp based on materials by M. Ernst, S. Reges, D. Notkin, R. Mercer, Wikipedia http://www.cs.washington.edu/331/ 1 Parametric polymorphism
More informationExercise 8 Parametric polymorphism November 18, 2016
Concepts of Object-Oriented Programming AS 2016 Exercise 8 Parametric polymorphism November 18, 2016 Task 1 Consider the following Scala classes: class A class B extends A class P1[+T] class P2[T
More informationThe collections interfaces
Generics in Java Advanced Programming 4/18/16 1 The collections interfaces Contains unique elements Maps unique keys to values 4/18/16 2 Collections in Java Array has a special language support Iterators
More informationCSE 331 Software Design & Implementation
CSE 331 Software Design & Implementation Hal Perkins Autumn 2013 Generics (Polymorphism) (Slides by Mike Ernst and David Notkin) 1 Varieties of abstraction Abstraction over computation: procedures int
More informationCITS2210 Object-Oriented Programming. Topic 9. Java: Generics
CITS2210 Object-Oriented Programming Topic 9 Java: Generics Summary: Generics allow code to be written that is parameterized with respect to one or more types. This allows a class or method to be used
More information301AA - Advanced Programming [AP-2017]
301AA - Advanced Programming [AP-2017] Lecturer: Andrea Corradini andrea@di.unipi.it Tutor: Lillo GalleBa galleba@di.unipi.it Department of Computer Science, Pisa Academic Year 2017/18 AP-2018-15: Java
More information1.1. Annotations History Lesson - C/C++
1. Additions Thanks to Dr. James Heliotis. He started it all :) See also here: and see also here: and here: You need to use the tools from the Java release candidate 1 % bash % export PATH=/usr/local/j2sdk1.5.0-rc1/bin:$PATH
More informationDistributed Systems Recitation 1. Tamim Jabban
15-440 Distributed Systems Recitation 1 Tamim Jabban Office Hours Office 1004 Tuesday: 9:30-11:59 AM Thursday: 10:30-11:59 AM Appointment: send an e-mail Open door policy Java: Object Oriented Programming
More information301AA - Advanced Programming [AP-2017]
301AA - Advanced Programming [AP-2017] Lecturer: Andrea Corradini andrea@di.unipi.it Tutor: Lillo GalleBa galleba@di.unipi.it Department of Computer Science, Pisa Academic Year 2017/18 AP-2017-14: Java
More informationParametric polymorphism and Generics
Parametric polymorphism and Generics Today s Lecture Outline Parametric polymorphism Java generics Declaring and instantiating generics Bounded types: restricting instantiations Generics and subtyping.
More informationgeneric programming alberto ferrari university of parma
generic programming alberto ferrari university of parma contents generic programming java generic programming methods & generic programming classes & generic programming java with generics generic methods
More informationJDK 7 (2011.7) knight76.tistory.com Knight76 at gmail.com
JDK 7 (2011.7) JDK 7 #2 Project Coin knight76.tistory.com Knight76 at gmail.com 1 Project Coin 2 Project Leader Joseph D. Darcy( ) IDEA 2 27, 2009 3 30, 2009 (open call) 70 jdk 7, Language, The Java programming-language
More informationPrimitive Java Generic Class
Primitive Java Generic Class 1 A buffer pool is a data structure that caches records retrieved from a disk file, in order to improve an application's performance. Typically, the pool stores some sort of
More informationDistributed Systems Recitation 1. Tamim Jabban
15-440 Distributed Systems Recitation 1 Tamim Jabban Office Hours Office 1004 Sunday, Tuesday: 9:30-11:59 AM Appointment: send an e-mail Open door policy Java: Object Oriented Programming A programming
More informationEPITA Première Année Cycle Ingénieur. Atelier Java - J2
EPITA Première Année Cycle Ingénieur marwan.burelle@lse.epita.fr http://www.lse.epita.fr Plan 1 A Classical Design Pattern Abstract Classes 2 A Solution: A Classical Design Pattern Abstract Classes Overview
More informationIntroduction to Programming Using Java (98-388)
Introduction to Programming Using Java (98-388) Understand Java fundamentals Describe the use of main in a Java application Signature of main, why it is static; how to consume an instance of your own class;
More informationJava Brand Generics. Advanced Topics in Java. Khalid Azim Mughal Version date:
Java Brand Generics Advanced Topics in Java Khalid Azim Mughal khalid@ii.uib.no http://www.ii.uib.no/~khalid/atij/ Version date: 2005-03-03 Khalid Azim Mughal Java Brand Generics 1/40 Overview Introduction
More informationCSE 331 Software Design & Implementation
CSE 331 Software Design & Implementation Hal Perkins Winter 2018 Generics UW CSE 331 Winter 2018 1 Varieties of abstraction Abstraction over computation: procedures (methods) int x1, y1, x2, y2; Math.sqrt(x1*x1
More informationWeiss Chapter 1 terminology (parenthesized numbers are page numbers)
Weiss Chapter 1 terminology (parenthesized numbers are page numbers) assignment operators In Java, used to alter the value of a variable. These operators include =, +=, -=, *=, and /=. (9) autoincrement
More informationLecture Outline. Parametric Polymorphism and Java Generics. Polymorphism. Polymorphism
Lecture Outline Parametric Polymorphism and Java Generics Parametric polymorphism Java generics Declaring and instantiating generics Bounded types: restricting instantiations Generics and subtyping. Wildcards
More informationCSCE 314 Programming Languages
CSCE 314 Programming Languages! Java Generics II Dr. Hyunyoung Lee!!! 1 Type System and Variance Within the type system of a programming language, variance refers to how subtyping between complex types
More informationAgenda. Objects and classes Encapsulation and information hiding Documentation Packages
Preliminaries II 1 Agenda Objects and classes Encapsulation and information hiding Documentation Packages Inheritance Polymorphism Implementation of inheritance in Java Abstract classes Interfaces Generics
More informationCSE 331 Software Design and Implementation. Lecture 13 Generics 1
CSE 331 Software Design and Implementation Lecture 13 Generics 1 Zach Tatlock / Spring 2018 Varieties of abstraction Abstraction over computation: procedures (methods) int x1, y1, x2, y2; Math.sqrt(x1*x1
More informationRules and syntax for inheritance. The boring stuff
Rules and syntax for inheritance The boring stuff The compiler adds a call to super() Unless you explicitly call the constructor of the superclass, using super(), the compiler will add such a call for
More informationProblems. Java Generics. Example. Example. Often you need the same behavior for different kind of classes
Problems Often you need the same behavior for different kind of classes Java Generics Use Object references to accommodate any object type Use Generic classes and Method The use of Object references induces
More informationData Structure. Recitation IV
Data Structure Recitation IV Topic Java Generics Java error handling Stack Lab 2 Java Generics The following code snippet without generics requires casting: List list = new ArrayList(); list.add("hello");
More informationOperators and Expressions
Operators and Expressions Conversions. Widening and Narrowing Primitive Conversions Widening and Narrowing Reference Conversions Conversions up the type hierarchy are called widening reference conversions
More information#Students per correct answers
Generics in Java Programming Projects 14/04/15 1 #Students per correct answers Quiz"2" 10" 9" 8" 7" 6" 5" 4" 3" 2" 1" 0" 10" 9" 8" 7" 6" 5" 4" 3" 2" 1" 0" #"Correct"Answers" 10" 9" 8" 7" 6" 5" 4" 3" 2"
More information09/02/2013 TYPE CHECKING AND CASTING. Lecture 5 CS2110 Spring 2013
1 TYPE CHECKING AND CASTING Lecture 5 CS2110 Spring 2013 1 Type Checking 2 Java compiler checks to see if your code is legal Today: Explore how this works What is Java doing? Why What will Java do if it
More informationpublicvoid set(objectobject){ this. object =object;} public Objectget(){ return object;}
1. Consider the following code (Oracle): publicclass Bucket{ private Object object ; publicvoid set(objectobject){ this. object =object; public Objectget(){ return object; Which of the following is an
More informationCMSC 341. Nilanjan Banerjee
CMSC 341 Nilanjan Banerjee http://www.csee.umbc.edu/~nilanb/teaching/341/ Announcements Just when you thought Shawn was going to teach this course! On a serious note: register on Piazza I like my classes
More informationJava: exceptions and genericity
Chair of Software Engineering Carlo A. Furia, Marco Piccioni, Bertrand Meyer Java: exceptions and genericity Chair of Software Engineering Carlo A. Furia, Marco Piccioni, Bertrand Meyer Exceptions Exceptions
More informationArgument Passing All primitive data types (int etc.) are passed by value and all reference types (arrays, strings, objects) are used through refs.
Local Variable Initialization Unlike instance vars, local vars must be initialized before they can be used. Eg. void mymethod() { int foo = 42; int bar; bar = bar + 1; //compile error bar = 99; bar = bar
More informationAnnouncements. Lecture 14 Generics 1. Announcements. CSE 331 Software Design and Implementation. Leah Perlmutter / Summer 2018
CSE 331 Software Design and Implementation Lecture 14 Generics 1 Announcements Leah Perlmutter / Summer 2018 Announcements Quiz 5 is due Thursday Homework 6 due Thursday Midterm grades and feedback will
More informationCSE 331 Software Design and Implementation. Lecture 14 Generics 1
CSE 331 Software Design and Implementation Lecture 14 Generics 1 Leah Perlmutter / Summer 2018 Announcements Announcements Quiz 5 is due Thursday Homework 6 due Thursday Midterm grades and feedback will
More informationJAVA V Source files Java, winter semester
JAVA Source files 17.10.2017 1 Unicode programs ~ Unicode comments, identifiers, char and string constants the rest is in ASCII (
More informationJAVA V Assertions Java, winter semester
JAVA Assertions 1 Assertion since Java 1.4 the statement with a boolean expression a developer supposes that the expression is always satisfied (evaluates to true) if it is evaluated to false -> error
More informationThe list abstract data type defined a number of operations that all list-like objects ought to implement:
Chapter 7 Polymorphism Previously, we developed two data structures that implemented the list abstract data type: linked lists and array lists. However, these implementations were unsatisfying along two
More informationGeneric programming in OO Languages
CS 242 2012 Generic programming in OO Languages Reading Text: Sections 9.4.1 and 9.4.3 J Koskinen, Metaprogramming in C++, Sections 2 5 Gilad Bracha, Generics in the Java Programming Language Questions
More information1 Shyam sir JAVA Notes
1 Shyam sir JAVA Notes 1. What is the most important feature of Java? Java is a platform independent language. 2. What do you mean by platform independence? Platform independence means that we can write
More informationGenerics עזאם מרעי המחלקה למדעי המחשב אוניברסיטת בן-גוריון
Generics עזאם מרעי המחלקה למדעי המחשב אוניברסיטת בן-גוריון 2 Example List myintlist = new LinkedList(); // 1 myintlist.add(new Integer(0)); // 2 Integer x = (Integer) myintlist.iterator().next(); // 3
More informationGenerics עזאם מרעי המחלקה למדעי המחשב אוניברסיטת בן-גוריון
Generics עזאם מרעי המחלקה למדעי המחשב אוניברסיטת בן-גוריון 2 Example List myintlist = new LinkedList(); // 1 myintlist.add(new Integer(0)); // 2 Integer x = myintlist.iterator().next(); // 3 3 Example
More informationAdvanced Topics in Java and on Security in Systems Effective Generics. Eirik Eltvik 26 th of February 2007
Advanced Topics in Java and on Security in Systems Effective Generics Eirik Eltvik 26 th of February 2007 Taking care when calling Legacy code Checks at compile-time is not always appropriate When? Legacy
More informationGenerics and Type Safety. CS 180 Sunil Prabhakar Department of Computer Science Purdue University
Generics and Type Safety CS 180 Sunil Prabhakar Department of Computer Science Purdue University Dynamic Data Collections Already seen several examples of dynamic data Linked list, Stack, Queue, Trees
More informationJava Programming Training for Experienced Programmers (5 Days)
www.peaklearningllc.com Java Programming Training for Experienced Programmers (5 Days) This Java training course is intended for students with experience in a procedural or objectoriented language. It
More informationContents. I. Classes, Superclasses, and Subclasses. Topic 04 - Inheritance
Contents Topic 04 - Inheritance I. Classes, Superclasses, and Subclasses - Inheritance Hierarchies Controlling Access to Members (public, no modifier, private, protected) Calling constructors of superclass
More informationLanguage Features. 1. The primitive types int, double, and boolean are part of the AP
Language Features 1. The primitive types int, double, and boolean are part of the AP short, long, byte, char, and float are not in the subset. In particular, students need not be aware that strings are
More informationPieter van den Hombergh Richard van den Ham. March 1, 2018
,, Pieter van den Hombergh Richard van den Ham Fontys Hogeschool voor Techniek en Logistiek Type : Upper March 1, 2018 /FHTenL, March 1, 2018 1/29 Topics, Type : Upper Type : Lower Bounds, accepting things
More informationJava 1.5 in a Nutshell
Java 1.5 in a Nutshell Including Generics, Enumerated Types, Autoboxing/Unboxing, and an Enhanced for Loop http://java.sun.com/j2se/1.5.0/docs/guide/language/ CS 2334 University of Oklahoma Brian F. Veale
More informationTest Class A. public class A { private int x, y; public int getx() { return x; } public int gety() { return y; }
Test Class A Two simple exampel classes public class A { private int x, y; public int getx() { return x; public int gety() { return y; public A( int ax, int ay ) { x = ax; y = ay; public String tostring()
More informationGeneralized Code. Fall 2011 (Honors) 2
CMSC 202H Generics Generalized Code One goal of OOP is to provide the ability to write reusable, generalized code. Polymorphic code using base classes is general, but restricted to a single class hierarchy
More informationSpecialization of Java Generic Types
Specialization of Java Generic Types Sam BeVier, Elena Machkasova University of Minnesota, Morris July 17, 2006 Contents 1 Overview 1 1.1 Introduction.............................. 1 1.2 Specializing Type
More informationObjects and Iterators
Objects and Iterators Can We Have Data Structures With Generic Types? What s in a Bag? All our implementations of collections so far allowed for one data type for the entire collection To accommodate a
More informationGeneric types. Announcements. Raw ArrayLists. Generic types (cont.) Creating a raw ArrayList: Accessing a raw ArrayList:
Announcements PS 3 is ready Midterm exam 1: Tuesday, April 11, in class Closed book but one sheet, both sides, of A4 paper is allowed Today s topic: Generics (parameterized types) Readings for this slide
More informationClosed book but one sheet, both sides, of A4 paper is allowed. Section 2.5 of the text Generics in the Java Programming Languages by Gilad Bracha
Announcements PS 3 is ready Midterm exam 1: Tuesday, April 11, in class Closed book but one sheet, both sides, of A4 paper is allowed Today s topic: Generics (parameterized types) Readings for this slide
More informationINSTRUCTIONS TO CANDIDATES
NATIONAL UNIVERSITY OF SINGAPORE SCHOOL OF COMPUTING MIDTERM ASSESSMENT FOR Semester 2 AY2017/2018 CS2030 Programming Methodology II March 2018 Time Allowed 90 Minutes INSTRUCTIONS TO CANDIDATES 1. This
More informationCSE 331 Software Design & Implementation
CSE 331 Software Design & Implementation Kevin Zatloukal Summer 2017 Generics (Based on slides by Mike Ernst, Dan Grossman, David Notkin, Hal Perkins, Zach Tatlock) Preface This lecture will get into the
More informationAdvanced Programming - JAVA Lecture 4 OOP Concepts in JAVA PART II
Advanced Programming - JAVA Lecture 4 OOP Concepts in JAVA PART II Mahmoud El-Gayyar elgayyar@ci.suez.edu.eg Ad hoc-polymorphism Outline Method overloading Sub-type Polymorphism Method overriding Dynamic
More informationPolymorphism. return a.doublevalue() + b.doublevalue();
Outline Class hierarchy and inheritance Method overriding or overloading, polymorphism Abstract classes Casting and instanceof/getclass Class Object Exception class hierarchy Some Reminders Interfaces
More informationDrStrangebrac<E,T> Or how I learned to stop worrying, and love generics...
DrStrangebrac Or how I learned to stop worrying, and love generics... a presentation to The Seattle Java Users Group by Wilhelm Fizpatrick http://www.agileinformatics.com/ Java is Sun Microsystems,
More informationDay 4. COMP1006/1406 Summer M. Jason Hinek Carleton University
Day 4 COMP1006/1406 Summer 2016 M. Jason Hinek Carleton University today s agenda assignments questions about assignment 2 a quick look back constructors signatures and overloading encapsulation / information
More informationCollections Algorithms
Collections Algorithms 1 / 11 The Collections Framework A collection is an object that represents a group of objects. The collections framework allows different kinds of collections to be dealt with in
More informationCSCI-142 Exam 1 Review September 25, 2016 Presented by the RIT Computer Science Community
CSCI-12 Exam 1 Review September 25, 2016 Presented by the RIT Computer Science Community http://csc.cs.rit.edu 1. Provide a detailed explanation of what the following code does: 1 public boolean checkstring
More informationPARAMETRIC POLYMORPHISM
PARAMETRIC POLYMORPHISM Java C#! Parametric polymorphism: " Java Generics and Generic C# for.net! The idea: the compiler is able to check parametric classes just looking at their definilon 1 Java Generics
More informationAtelier Java - J1. Marwan Burelle. EPITA Première Année Cycle Ingénieur.
marwan.burelle@lse.epita.fr http://wiki-prog.kh405.net Plan 1 2 Plan 3 4 Plan 1 2 3 4 A Bit of History JAVA was created in 1991 by James Gosling of SUN. The first public implementation (v1.0) in 1995.
More informationJava 5 New Language Features
Java 5 New Language Features Ing. Jeroen Boydens, BLIN prof dr. ir. Eric Steegmans http://users.khbo.be/peuteman/java5/ Enterprise Programming Last session. Jeroen Boydens 1. JDK v1.4: assert 2. Generics
More informationOOPSLA 2004, Vancouver
Alan Donovan, Adam Kieżun Matthew Tschantz, Michael Ernst MIT Computer Science & AI Lab OOPSLA 2004, Vancouver Introduction: generic types in Java.5 The problem: inferring type arguments Our approach Allocation
More informationHAS-A Relationship. Association is a relationship where all objects have their own lifecycle and there is no owner.
HAS-A Relationship Association is a relationship where all objects have their own lifecycle and there is no owner. For example, teacher student Aggregation is a specialized form of association where all
More informationEffects of Static Type Specialization on Java Generic Collections (Technical Report) UMM Working Papers Series Work in progress
Effects of Static Type Specialization on Java Generic Collections (Technical Report) UMM Working Papers Series Work in progress Elena Machkasova, Elijah Mayfield, Nathan Dahlberg, J. Kyle Roth University
More informationPolymorphism (generics)
Polymorphism (generics) CSE 331 University of Washington Michael Ernst Varieties of abstraction Abstraction over computation: procedures (methods) int x1, y1, x2, y2; Math.sqrt(x1*x1 + y1*y1); Math.sqrt(x2*x2
More informationGeneralizing Collection Classes Using Generics with other Java 1.5 Features Integration of Generics with Previous Releases User built generic classes
Java Generics 1 Concepts Generalizing Collection Classes Using Generics with other Java 1.5 Features Integration of Generics with Previous Releases User built generic classes 2 What Are Generics? Generics
More information5/23/2015. Core Java Syllabus. VikRam ShaRma
5/23/2015 Core Java Syllabus VikRam ShaRma Basic Concepts of Core Java 1 Introduction to Java 1.1 Need of java i.e. History 1.2 What is java? 1.3 Java Buzzwords 1.4 JDK JRE JVM JIT - Java Compiler 1.5
More informationJava Design Goals. Lecture 32: Java. Java Original implementations slow! Exceptions & Subtyping. - void method readfiles() throws IOException {...}!
Java Design Goals Lecture 32: Java CSC 131 Fall, 2014 Kim Bruce Portability across platforms Reliability Safety (no viruses) Dynamic Linking Multithreaded execution Simplicity and Familiarity Efficiency
More informationIntroduction to Generics in Java 5
Introduction to Generics in Java 5 One trouble with the list, stack, and queue ADTs that we have written so far is that the type of the objects stored in them cannot be checked at compile time. For example,
More informationContents. Figures. Tables. Examples. Foreword. Preface. 1 Basics of Java Programming 1. xix. xxi. xxiii. xxvii. xxix
PGJC4_JSE8_OCA.book Page ix Monday, June 20, 2016 2:31 PM Contents Figures Tables Examples Foreword Preface xix xxi xxiii xxvii xxix 1 Basics of Java Programming 1 1.1 Introduction 2 1.2 Classes 2 Declaring
More informationCSE 8B Intro to CS: Java
CSE 8B Intro to CS: Java Winter, 2006 March 7 (Day 17) ArrayList Generics Class that: works like a resizable array ArrayList Has a current capacity: if you add more elements, it ll allocate more space
More information