java generics finalized
Post on 30-May-2018
234 Views
Preview:
TRANSCRIPT
-
8/14/2019 Java Generics Finalized
1/31
Java Generics
-
8/14/2019 Java Generics Finalized
2/31
-
8/14/2019 Java Generics Finalized
3/31
Parameterized Classes and Generics
The classArrayList is aparameterized class
It has a parameter, denoted by Base_Type, thatcan be replaced by any reference type to obtain aclass forArrayLists with the specified base type
Starting with version 5.0, Java allows classdefinitions with parameters for types
These classes that have type parameters are calledparameterized class orgeneric definitions, or, simply,generics
-
8/14/2019 Java Generics Finalized
4/31
A class definition with a type parameter is stored
in a file and compiled just like any other class.
Once a parameterized class is compiled, it can beused like any other class.
However, the class type plugged in for the type parametermust be specified before it can be used in a program.
Doing this is said to instantiate the generic class.
Sample object = new Sample();
Generics (Contd)
-
8/14/2019 Java Generics Finalized
5/31
A Class Definition with a Type Parameter
-
8/14/2019 Java Generics Finalized
6/31
A class that is defined with a parameter for a typeis called a generic class or a parameterized class
The type parameter is included in angular brackets after theclass name in the class definition heading.
Any non-keyword identifier can be used for the typeparameter, but by convention, the parameter starts with anuppercase letter.
The type parameter can be used like other types used inthe definition of a class.
A Class Definition with a Type Parameter (Contd)
-
8/14/2019 Java Generics Finalized
7/31
Tip: Compile with the -Xlint Option
There are many pitfalls that can be encountered
when using type parameters
Compiling with the -Xlint option will providemore informative diagnostics of any problems or
potential problems in the code
javac Xlint Sample.java
Question: How would you do that in JCreator?
-
8/14/2019 Java Generics Finalized
8/31
Generic Class Definition: An Example
-
8/14/2019 Java Generics Finalized
9/31
Generic Class Definition: An Example (Contd)
-
8/14/2019 Java Generics Finalized
10/31
Generic Class Usage: An Example
-
8/14/2019 Java Generics Finalized
11/31
Generic Class Usage: An Example (Contd)
Program Output:
-
8/14/2019 Java Generics Finalized
12/31
A Generic Constructor Name Has No Type Parameter!!!
Although the class name in a parameterized class definition has a typeparameter attached, the type parameter is not used in the heading ofthe constructor definition:
public Pair()
A constructor can use the type parameter as the type for a parameter ofthe constructor, but in this case, the angular brackets are not used:
public Pair(T first, T second)
However, when a generic class is instantiated, the angularbrackets are used:
Pair pair = new Pair("Happy", "Day");
-
8/14/2019 Java Generics Finalized
13/31
-
8/14/2019 Java Generics Finalized
14/31
Limitations on Type Parameter Usage
Within the definition of a parameterized class
definition, there are places where an ordinary classname would be allowed, but a type parameter is notallowed.
In particular, the type parameter cannot be used insimple expressions using new to create a new object
For instance, the type parameter cannot be used as aconstructor name or like a constructor:
T object = new T();T[] a = new T[10];
-
8/14/2019 Java Generics Finalized
15/31
Limitations on Generic Class Instantiation
Arrays such as the following are illegal:
Pair[] a =
new Pair[10];
Although this is a reasonable thing to want to
do, it is not allowed given the way that Java
implements generic classes
-
8/14/2019 Java Generics Finalized
16/31
Using Generic Classes and Automatic Boxing
-
8/14/2019 Java Generics Finalized
17/31
Using Generic Classes and Automatic Boxing (Contd)
Program Output:
M lti l T P t
-
8/14/2019 Java Generics Finalized
18/31
A generic class definition can have any number
of type parameters.
Multiple type parameters are listed in angular
brackets just as in the single type parameter case,but are separated by commas.
Multiple Type Parameters
M lti l T P t (C td)
-
8/14/2019 Java Generics Finalized
19/31
Multiple Type Parameters (Contd)
M lti l T P t (C td)
-
8/14/2019 Java Generics Finalized
20/31
Multiple Type Parameters (Contd)
-
8/14/2019 Java Generics Finalized
21/31
A Generic Classes and Exceptions
It is not permitted to create a generic class with
Exception, Error, Throwable, or anydescendent class ofThrowable
A generic class cannot be created whose objectsare throwable
public class GEx extends Exception
The above example will generate a compiler errormessage
U i G i Cl ith T T P t
-
8/14/2019 Java Generics Finalized
22/31
Using a Generic Class with Two Type Parameters
Program Output:
B d f T P t
-
8/14/2019 Java Generics Finalized
23/31
Bounds for Type Parameters Sometimes it makes sense to restrict the possible
types that can be plugged in for a type parameter
T.
For instance, to ensure that only classes that implement theComparableinterface are plugged in forT, define a class
as follows:
public class RClass
"extends Comparable"serves as a boundon the type parameterT.
Any attempt to plug in a type forT which does not implement theComparable interface will result in a compiler error message.
B d f T P t (C td)
-
8/14/2019 Java Generics Finalized
24/31
A bound on a type may be a class name (rather than aninterface name)
Then only descendent classes of the bounding class may be plugged infor the type parameters:
public class ExClass
A bounds expression may contain multiple interfaces andup to one class.
If there is more than one type parameter, the syntax is asfollows:
public class Two
Bounds for Type Parameters (Contd)
B d f T P t (C td)
-
8/14/2019 Java Generics Finalized
25/31
Bounds for Type Parameters (Contd)
G i I f
-
8/14/2019 Java Generics Finalized
26/31
Generic Interfaces
An interface can have one or more type
parameters.
The details and notation are the same as they are
for classes with type parameters.
G i M th d
-
8/14/2019 Java Generics Finalized
27/31
Generic Methods
When a generic class is defined, the type parametercan be used in the definitions of the methods for that
generic class.
In addition, a generic method can be defined that has
its own type parameter that is not the type parameterof any class
A generic method can be a member of an ordinary class or a
member of a generic class that has some other type parameter.
The type parameter of a generic method is local to that method,not to the class.
G i M th d (C td)
-
8/14/2019 Java Generics Finalized
28/31
The type parameter must be placed (in angularbrackets) after all the modifiers, and before thereturned type:
public static T genMethod(T[] a)
When one of these generic methods is invoked, themethod name is prefaced with the type to be
plugged in, enclosed in angular brackets
String s = NonG.genMethod(c);
Generic Methods (Contd)
I h it ith G i Cl
-
8/14/2019 Java Generics Finalized
29/31
Inheritance with Generic Classes A generic class can be defined as a derived
class of an ordinary class or of another generic
class
As in ordinary classes, an object of the subclass typewould also be of the superclass type
Given two classes:Aand B, and given G: ageneric class, there is no relationship betweenGand G
This is true regardless of the relationship between classAand B, e.g., if class B is a subclass of classA
A D i d G i Cl A E l
-
8/14/2019 Java Generics Finalized
30/31
A Derived Generic Class: An Example
A D i d G i Cl A E l (C td)
-
8/14/2019 Java Generics Finalized
31/31
A Derived Generic Class: An Example (Contd)
Program Output:
top related