Generics

 
Generics
 
 
Object Oriented Programming
 
1
 
What is it?
 
Generics enable you to detect errors at compile
time rather than at runtime.
With this capability, you can define a class,
interfance or a method with generic types that
the compiler can replace with concrete types.
For example, Java defines a generic 
ArrayList
class for storing the elements of a generic type.
The key benefit of generics is to enable errors to
be detected at compile time rather than 
at
runtime.
If you attempt to use an incompatible object, the
compiler 
will detect that error.
 
Object Oriented Programming
 
2
Motivations and Benefits
The motivation for using Java generics is
to detect errors at compile time.
Here, 
<T> 
represents a formal generic
type, which can be replaced later with an
actual concrete type.
Replacing a generic type is called a
generic instantiation.
By convention, a single capital letter such
as 
E 
or 
T 
is used to denote a formal
generic type.
Object Oriented Programming
3
 
Defining Generic class
 
A generic type can be defined for a class
or interface. A concrete type must be
specified when using the class to create
an object or using the class or interface
to 
declare a reference variable.
DemoGenericStack.java
 
Object Oriented Programming
 
4
 
Generic methods
 
A generic type can be defined for a static
method.
GenericMethodDemo.java
 
Object Oriented Programming
 
5
 
Bounded Generic type
 
A generic type can be specified as a
subtype of another type. Such a generic
type is 
called 
bounded
.
There may be times when you want to
restrict the types that can be used as type
arguments in a parameterized type.
For example, a method that operates on
numbers might only want to accept
instances of Number or its subclasses.
BoundedTypeDemo.java
 
Object Oriented Programming
 
6
Raw types and backward
compatibility
A generic class or interface used without
specifying a concrete type, called a raw
type, enables backward compatibility with
earlier versions of Java.
GenericStack stack = 
new 
GenericStack(); // raw type
This is roughly equivalent to
GenericStack<Object> stack = new GenericStack<Object>();
Object Oriented Programming
7
 
Wildcard generic type
 
You can use unbounded wildcards, bounded
wildcards, or lower-bound wildcards to specify a
range for a generic type.
What are wildcard generic types and why are
they needed?
WildCardNeedDemo.java – bounded wildcard
It has a compile error in line 8 because 
intStack
is not an instance of 
GenericStack<Number>
.
Thus, you cannot invoke 
max(intStack)
.
The fact is that 
Integer 
is a subtype of 
Number
,
but 
GenericStack<Integer> 
is not a subtype of
GenericStack<Number>
.
 
Object Oriented Programming
 
8
 
Unbounded wildcard ? (<? extends
Object)
 
<?> 
is a wildcard that represents any object type.
It is equivalent to 
<? extends Object>
. What
happens if you replace 
GenericStack<?> 
with
GenericStack<Object>
?
It would be wrong to invoke 
print(intStack)
,
because 
intStack 
is not an instance of
GenericStack<Object>
.
Note that 
GenericStack<Integer> 
is not a
subtype of 
GenericStack<Object>
, even
though 
Integer 
is a subtype of 
Object
.
AnyWildCardDemo.java
 
Object Oriented Programming
 
9
 
Lower bounded wildcard
 
The third form, 
? super T
, called a lower-
bound wildcard, denotes 
T 
or a
supertype of 
T
.
SuperWildCardDemo.java
 
Object Oriented Programming
 
10
 
Program
 
Implement the following generic method
for linear search.
public static 
<E 
extends 
Comparable<E>> 
int
linearSearch(E[] list, E key)
LinearSearch.java
 
Object Oriented Programming
 
11
 
Generic class with two type
parameter
 
 You can declare more than one type
parameter in a generic type.
To specify two or more type parameters,
simply use a comma-separated list.
TwoGen.java
 
Object Oriented Programming
 
12
Cont.
Generic Types differ based on their type
arguments.  - Gen<T> class
   
Gen<Integer> g1 = new Gen<Integer>();
    Gen<String> g2 = new Gen<String>();
     g1 = g2  //error
Constructor can be generic even if its class is not.
Object Oriented Programming
13
 
Generic Interface
 
In addition to generic classes and
methods, you can also have generic
interfaces.
Generic interfaces are specified just like
generic classes.
MinMax.java
 
Object Oriented Programming
 
14
 
Generic class hierarchy
 
Generic classes can be part of a class hierarchy in
just the same way as a non-generic class.
Thus, a generic class can act as a superclass or be
a subclass.
The key difference between 
generic and non-
generic hierarchies is that in a generic hierarchy,
any type arguments needed by a generic
superclass must be passed up the hierarchy by all
subclasses.
This is similar to the way that constructor
arguments must be passed up a hierarchy.
GenHierarchy.java
 
Object Oriented Programming
 
15
 
Method overriding in generic class
 
A method in a generic class can be
overridden just like any other method.
Gen2MethodOver.java
 
Object Oriented Programming
 
16
Some generic restrictions
Type Parameters Can’t Be
Instantiated.
Restrictions on Static Members
Generic Array Restrictions
A generic class cannot extend
Throwable
. This means that you cannot
create generic 
exception classes.
Object Oriented Programming
17
 
List, Stack, Queue and Priority
Queue
 
 
Object Oriented Programming
 
18
 
Collection Framework
 
Choosing the best data structures and algorithms
for a particular task is one of the keys to
developing high-performance software.
In object-oriented thinking, a data structure, also
known as a 
container or container object
, is an
object that stores other objects, referred to as
data or elements.
ArrayList 
class, which is a data structure to
store elements in a list.
Java provides several more data structures that
can be used to organize and manipulate data
efficiently. These are commonly known as 
Java
Collections Framework
.
 
Object Oriented Programming
 
19
Cont.
The common features of these collections
are defined in the interfaces, and
implementations are provided in concrete
classes.
Object Oriented Programming
20
undefined
 
Object Oriented Programming
 
21
 
Cont.
 
The Java Collections Framework supports two types of
containers:
One for storing a collection of elements is simply called a
collection
.
The other, for storing key/value pairs, is called a 
map
.
In this unit, our attention is on to the following collections:
Set
s store a group of nonduplicate elements.
List
s store an ordered collection of elements.
Stack
s store objects that are processed in a last-in, first-out
fashion.
Queue
s store objects that are processed in a first-in, first-
out fashion.
PriorityQueue
s store objects that are processed in the
order of their priorities.
 
Object Oriented Programming
 
22
 
Iterator
 
Each collection is 
Iterable
. You can obtain
its 
Iterator 
object to traverse all the
elements in the collection.
The 
Collection 
interface extends the
Iterable 
interface.
The 
Iterable 
interface defines the 
iterator
method, which returns an iterator.
The 
Iterator 
interface provides a uniform
way for traversing elements in various types
of collections.
TestIterator.java
 
Object Oriented Programming
 
23
Lists
The 
List 
interface extends the
Collection 
interface and defines a
collection for storing elements in a
sequential order.
To create a list, use one of its two
concrete 
classes: 
ArrayList 
or
LinkedList
TestArrayAndLinkedList.java
Object Oriented Programming
24
 
Linkedlist Vs ArrayList
 
The critical difference between them
pertains to internal implementation, which
affects their performance.
ArrayList 
is efficient for retrieving elements
and 
LinkedList 
is efficient for inserting and
removing elements at the beginning of the
list.
Both have the same performance for
inserting and removing elements in the
middle or at the end of the list.
 
Object Oriented Programming
 
25
 
Comparator Interface
 
Comparator 
can be used to compare
the objects of a class that doesn’t
implement 
Comparable
.
You can define a 
comparator 
to compare
the elements of different classes.
To do so, define a class that implements
the 
java.util.Comparator<T> 
interface
and overrides its 
compare 
method.
TestComparator.java
 
Object Oriented Programming
 
26
 
Static methods of Lists and
Collections
 
 
Object Oriented Programming
 
27
 
Vector and Stack Class
 
Vector 
is a subclass of 
AbstractList
, and
Stack 
is a subclass of 
Vector 
in the 
Java
API.
Vector 
is the same as 
ArrayList
, except
that it contains synchronized methods for
accessing and modifying the vector.
Synchronized methods can prevent data
corruption when a vector is accessed and
modified by two or more threads
concurrently
 
Object Oriented Programming
 
28
undefined
 
Object Oriented Programming
 
29
undefined
 
Object Oriented Programming
 
30
 
Queues and Priority Queues
 
A 
queue
 
is a first-in, first-out data
structure. Elements are appended to the
end of the queue and are removed from
the beginning of the queue.
In a 
priority queue
, elements are assigned
priorities. When accessing elements, the
element with the highest priority is
removed first.
 
Object Oriented Programming
 
31
undefined
 
Object Oriented Programming
 
32
Slide Note
Embed
Share

Generics in Java allow for compile-time error detection by enabling the definition of classes, interfaces, or methods with generic types. This feature replaces generic types with concrete types, such as with the ArrayList class in Java. Discover motivations, benefits, defining generic classes, methods, bounded generic types, raw types for backward compatibility, and wildcard generic types.

  • Java Generics
  • Object-Oriented Programming
  • Error Detection
  • Compile Time
  • Benefits

Uploaded on Feb 16, 2025 | 0 Views


Download Presentation

Please find below an Image/Link to download the presentation.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author.If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.

You are allowed to download the files provided on this website for personal or commercial use, subject to the condition that they are used lawfully. All files are the property of their respective owners.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author.

E N D

Presentation Transcript


  1. Generics Object Oriented Programming 1

  2. What is it? Generics enable you to detect errors at compile time rather than at runtime. With this capability, you can define a class, interfance or a method with generic types that the compiler can replace with concrete types. For example, Java defines a generic ArrayList class for storing the elements of a generic type. The key benefit of generics is to enable errors to be detected at compile time rather than at runtime. If you attempt to use an incompatible object, the compiler will detect that error. Object Oriented Programming 2

  3. Motivations and Benefits The motivation for using Java generics is to detect errors at compile time. Here, <T> represents a formal generic type, which can be replaced later with an actual concrete type. Replacing a generic type is called a generic instantiation. By convention, a single capital letter such as E or T is used to denote a formal generic type. Object Oriented Programming 3

  4. Defining Generic class A generic type can be defined for a class or interface. A concrete type must be specified when using the class to create an object or using the class or interface to declare a reference variable. DemoGenericStack.java Object Oriented Programming 4

  5. Generic methods A generic type can be defined for a static method. GenericMethodDemo.java Object Oriented Programming 5

  6. Bounded Generic type A generic type can be specified as a subtype of another type. Such a generic type is called bounded. There may be times when you want to restrict the types that can be used as type arguments in a parameterized type. For example, a method that operates on numbers might only want to accept instances of Number or its subclasses. BoundedTypeDemo.java Object Oriented Programming 6

  7. Raw types and backward compatibility A generic class or interface used without specifying a concrete type, called a raw type, enables backward compatibility with earlier versions of Java. GenericStack stack = new GenericStack(); // raw type This is roughly equivalent to GenericStack<Object> stack = new GenericStack<Object>(); Object Oriented Programming 7

  8. Wildcard generic type You can use unbounded wildcards, bounded wildcards, or lower-bound wildcards to specify a range for a generic type. What are wildcard generic types and why are they needed? WildCardNeedDemo.java bounded wildcard It has a compile error in line 8 because intStack is not an instance of GenericStack<Number>. Thus, you cannot invoke max(intStack). The fact is that Integer is a subtype of Number, but GenericStack<Integer> is not a subtype of GenericStack<Number>. Object Oriented Programming 8

  9. Unbounded wildcard ? (<? extends Object) <?> is a wildcard that represents any object type. It is equivalent to <? extends Object>. What happens if you replace GenericStack<?> with GenericStack<Object>? It would be wrong to invoke print(intStack), because intStack is not an instance of GenericStack<Object>. Note that GenericStack<Integer> is not a subtype of GenericStack<Object>, though Integer is a subtype of Object. AnyWildCardDemo.java even Object Oriented Programming 9

  10. Lower bounded wildcard The third form, ? super T, called a lower- bound wildcard, denotes T or a supertype of T. SuperWildCardDemo.java Object Oriented Programming 10

  11. Program Implement the following generic method for linear search. public static <E extends Comparable<E>> int linearSearch(E[] list, E key) LinearSearch.java Object Oriented Programming 11

  12. Generic class with two type parameter You can declare more than one type parameter in a generic type. To specify two or more type parameters, simply use a comma-separated list. TwoGen.java Object Oriented Programming 12

  13. Cont. Generic Types differ based on their type arguments. - Gen<T> class Gen<Integer> g1 = new Gen<Integer>(); Gen<String> g2 = new Gen<String>(); g1 = g2 //error Constructor can be generic even if its class is not. Object Oriented Programming 13

  14. Generic Interface In addition to generic classes and methods, you can also have generic interfaces. Generic interfaces are specified just like generic classes. MinMax.java Object Oriented Programming 14

  15. Generic class hierarchy Generic classes can be part of a class hierarchy in just the same way as a non-generic class. Thus, a generic class can act as a superclass or be a subclass. The key difference between generic and non- generic hierarchies is that in a generic hierarchy, any type arguments needed by a generic superclass must be passed up the hierarchy by all subclasses. This is similar to the way that constructor arguments must be passed up a hierarchy. GenHierarchy.java Object Oriented Programming 15

  16. Method overriding in generic class A method in a generic class can be overridden just like any other method. Gen2MethodOver.java Object Oriented Programming 16

  17. Some generic restrictions Type Instantiated. Restrictions on Static Members Generic Array Restrictions A generic class Throwable. This means that you cannot create generic exception classes. Parameters Can t Be cannot extend Object Oriented Programming 17

  18. List, Stack, Queue and Priority Queue Object Oriented Programming 18

  19. Collection Framework Choosing the best data structures and algorithms for a particular task is one of the keys to developing high-performance software. In object-oriented thinking, a data structure, also known as a container or container object, is an object that stores other objects, referred to as data or elements. ArrayList class, which is a data structure to store elements in a list. Java provides several more data structures that can be used to organize and manipulate data efficiently. These are commonly known as Java Collections Framework. Object Oriented Programming 19

  20. Cont. The common features of these collections are defined in the interfaces, and implementations are provided in concrete classes. Object Oriented Programming 20

  21. Object Oriented Programming 21

  22. Cont. The Java Collections Framework supports two types of containers: One for storing a collection of elements is simply called a collection. The other, for storing key/value pairs, is called a map. In this unit, our attention is on to the following collections: Sets store a group of nonduplicate elements. Lists store an ordered collection of elements. Stacks store objects that are processed in a last-in, first-out fashion. Queues store objects that are processed in a first-in, first- out fashion. PriorityQueues store objects that are processed in the order of their priorities. Object Oriented Programming 22

  23. Iterator Each collection is Iterable. You can obtain its Iterator object to traverse all the elements in the collection. The Collection interface extends the Iterable interface. The Iterable interface defines the iterator method, which returns an iterator. The Iterator interface provides a uniform way for traversing elements in various types of collections. TestIterator.java Object Oriented Programming 23

  24. Lists The Collection interface and defines a collection for storing elements in a sequential order. To create a list, use one of its two concrete classes: LinkedList TestArrayAndLinkedList.java List interface extends the ArrayList or Object Oriented Programming 24

  25. Linkedlist Vs ArrayList The critical difference between them pertains to internal implementation, which affects their performance. ArrayList is efficient for retrieving elements and LinkedList is efficient for inserting and removing elements at the beginning of the list. Both have the same performance for inserting and removing elements in the middle or at the end of the list. Object Oriented Programming 25

  26. Comparator Interface Comparator can be used to compare the objects of a class that doesn t implement Comparable. You can define a comparator to compare the elements of different classes. To do so, define a class that implements the java.util.Comparator<T> interface and overrides its compare method. TestComparator.java Object Oriented Programming 26

  27. Static methods of Lists and Collections Object Oriented Programming 27

  28. Vector and Stack Class Vector is a subclass of AbstractList, and Stack is a subclass of Vector in the Java API. Vector is the same as ArrayList, except that it contains synchronized methods for accessing and modifying the vector. Synchronized methods can prevent data corruption when a vector is accessed and modified by two or more threads concurrently Object Oriented Programming 28

  29. Object Oriented Programming 29

  30. Object Oriented Programming 30

  31. Queues and Priority Queues A queue is a first-in, first-out data structure. Elements are appended to the end of the queue and are removed from the beginning of the queue. In a priority queue, elements are assigned priorities. When accessing elements, the element with the highest priority is removed first. Object Oriented Programming 31

  32. Object Oriented Programming 32

More Related Content

giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#