5. Collections and Generics
Generics Basics
Generic Classes
Generic Objects
How Generics Work
Exercise. Print List
Exercise. Print List
Generics Inheritance
Generic Interfaces
Generic Methods
Generic Method Example
Generic Method Call
Wildcards
Bounded Wildcards
Bounded Wildcards Example
Home Exercise 5.3.2 ( 1 of 2)
Home Exercise 5.3.2 (2 of 2)
Manuals
107.00K
Категория: ПрограммированиеПрограммирование

5. Java collections and Generics. 3. Generics

1. 5. Collections and Generics

3. Generics

2. Generics Basics

• JDK 5.0 introduces generics
• Generics allow you to abstract over types
• The most common examples are container
types, such as those in the Collections
hierarchy
27.12.2016
Infopulse Training Center
2

3. Generic Classes

public class ClassName<Т>{
class body
}
• Parametric type T can be used in the class
body as usual type:
private T a;
public void set(T a) { this.a = a; }
public T get() { return a; }
27.12.2016
Infopulse Training Center
3

4. Generic Objects

• You need to set a type in <> when creating
an object of generic class:
public class GenClass<Т>{
.....
}
GenClass<Integer> cInt = new GenClass<Integer>();
27.12.2016
Infopulse Training Center
4

5. How Generics Work

• In the invocation all occurrences of the
formal type parameter are replaced by the
actual type argument
• The compiler can check the type
correctness of the program at compiletime
• Primitive types cannot use as actual types
27.12.2016
Infopulse Training Center
5

6. Exercise. Print List

• Create a class with list of objects of an
arbitrary given class with two methods:
– add for accumulation data in the list
– printList with a boolean parameter to print odd
or even elements of the list accordingly to
parameter’s value

7. Exercise. Print List

• See 531FirstGeneric project for the full
text

8. Generics Inheritance

• In general, if Sub is a subtype (subclass or
subinterface) of Base, and G is some
generic type declaration, it is not the case
that G<Sub> is a subtype of G<Base>
27.12.2016
Infopulse Training Center
8

9. Generic Interfaces

• Generic interfaces are similar to generic
classes:
public interface List<E>{
void add(E x);
Iterator<E> iterator();
}
public interface Iterator<E>{
E next();
boolean hasNext();
}
27.12.2016
Infopulse Training Center
9

10. Generic Methods

• Type parameters can also be declared
within method and constructor signatures
to create generic methods and generic
constructors:
public <U> void inspect(U u){ . . . }
• Type inference feature allows you to
invoke a generic method as you would an
ordinary method, without specifying a type
between angle brackets
27.12.2016
Infopulse Training Center
10

11. Generic Method Example

class ArrayAlg
{
public static <T> T getMiddle(T[] a)
{
return a[a.length / 2];
}
}
• You can define generic methods both inside
ordinary classes and inside generic classes
27.12.2016
Infopulse Training Center
11

12. Generic Method Call

• When you call a generic method, you can
place the actual types, enclosed in angle
brackets, before the method name:
String[] names = { "John", "Q.", "Public" };
String middle = ArrayAlg.<String>getMiddle(names);
27.12.2016
Infopulse Training Center
12

13. Wildcards

• What is the supertype of all kinds of
collections?
• Collection<Object> is not such supertype
due to generics inheritance rule
• Collection<?> (pronounced "collection of
unknown"), that is, a collection whose
element type matches anything
27.12.2016
Infopulse Training Center
13

14. Bounded Wildcards

• ? extends class_name
– ? stands for an unknown type
– that this unknown type is a subtype of
class_name
– example: List<? extends Shape>
• Code <? super class_name > would be
read as "an unknown type that is a
supertype of class_name, possibly
class_name itself
27.12.2016
Infopulse Training Center
14

15. Bounded Wildcards Example

public static double sumOfList(List<? extends
Number> list) {
double s = 0.0;
for (Number n : list) s += n.doubleValue();
return s;
}
27.12.2016
Infopulse Training Center
15

16. Home Exercise 5.3.2 ( 1 of 2)

• Create TBill class that saves deal for buying
treasury bills (nominal, price, amount of bills,
maturity date) and calculating deal income as
follows:
income = (nominal – price) * amount
27.12.2016
Infopulse Training Center
16

17. Home Exercise 5.3.2 (2 of 2)

• Create DealAnalisys class that saves deals
of any type (depo – single, barrier, month
capitalization, TBill)
• Create compareIncome method that
compares yield of the deal that saved in the
class object and deal given as method’s
parameter
27.12.2016
Infopulse Training Center
17

18. Manuals

• http://docs.oracle.com/javase/tutorial/extra
/generics/index.html
27.12.2016
Infopulse Training Center
18
English     Русский Правила