Java Reference
In-Depth Information
Forexample,
List<E>
isagenerictype,where
List
isaninterfaceandtypepara-
meter
E
identifies the list's element type. Similarly,
Map<K, V>
is a generic type,
where
Map
isaninterfaceandtypeparameters
K
and
V
identifythemap'skeyandvalue
types.
Note
Whendeclaringagenerictype,itisconventionaltospecifysingleuppercase
lettersastypeparameternames.Furthermore,thesenamesshouldbemeaningful.For
example,
E
indicateselement,
T
indicatestype,
K
indicateskey,and
V
indicatesvalue.If
possible,youshouldavoidchoosingatypeparameternamethatismeaninglesswhere
it is used. For example,
List<E>
means list of elements, but what does
List<S>
mean?
Parameterized types instantiate generic types. Each parameterized type replaces the
generic type's type parameters with type names. For example,
List<Employee>
(
List
of
Employee
)and
List<String>
(
List
of
String
)areexamplesofpara-
meterized types based on
List<E>
. Similarly,
Map<String, Employee>
is an
example of a parameterized type based on
Map<K, V>
.
The type name that replaces a type parameter is known as an
actual type argument
.
Generics supports five kinds of actual type arguments:
•
Concrete type
:Thenameofaclassorinterfaceispassedtothetypeparameter.
For example,
List<Employee> employees;
specifies that the list ele-
ments are
Employee
instances.
•
Concrete parameterized type
:Thenameofaparameterizedtypeispassedtothe
type parameter. For example,
List<List<String>> nameLists;
spe-
cifies that the list elements are lists of strings.
•
Array type
: An array is passed to the type parameter. For example,
List<String[]> countries;
specifiesthatthelistelementsarearrays
of
String
s, possibly city names.
•
Type parameter
:Atypeparameterispassedtothetypeparameter.Forexample,
given class declaration
class X<E> { List<E> queue; }
,
X
's type
parameter
E
is passed to
List
's type parameter
E
.
•
Wildcard
:The
?
ispassedtothetypeparameter,indicatinganunknownactual
typeargument.Forexample,
List<?> list;
specifiesthatthelistelements
are unknown. You will learn about wildcards later in the chapter.
A generic type also identifies a
raw type
, which is a generic type without its type
parameters.Forexample,
List<Employee>
'srawtypeis
List
.Rawtypesarenon-
generic and can hold any
Object
.