Wildcards in Parameterized Classes/Interfaces
in Java |
Prof. David Bernstein
|
Computer Science Department |
bernstdh@jmu.edu |
Object
(since it is an ancestor of
all classes) but this isn't "type safe"Object
is appropriateextends
, followed by, what are
unfortunately called, the bounding types (separated by
an &)extends
was probably a bad choice
since any class that either extends the bounding type or
implements the bounding type can be used (which is why
there can be more than one)? extends Type
? super Type
Object
(if unbounded)Statistics
class that can,
among other things, find the maximum and minimum
of a data setOrdered
interface to characterize
the datamin()
and max()
methods that
are passed
List<Ordered>
objects
Ordered
Interface
Statistics
Classmax()
that is passed
a List
of objects that
implements Ordered
(e.g., List<Person>
where
Person implements Ordered)
will not compile because the List
class must
ensure that its elements are Person
objects,
not Ordered
objects (a type of class
invariance)?
represents an unknown type? extends B
where
B, the upper bound, can be a class or interface
(and "extends" means "extends or implements")Object
(the root node) at the top and descendants at lower
levels
Statistics
ClasscompareTo()
method is not type safe
because it only ensures that this
and
other
are both Ordered
(but not necessarily of the same type)Ordered
max()
and min()
methods can
now return an object of appropriate type
Ordered
Interface
Statistics
ClassRectangle
classShape
interface that is realized by the
Rectangle
classList<Rectangle>
Rectangle
class, it may only need
the capabilities of the Shape
interfaceList<Shape>
List<? extends Shape>
? super B
where
B is the lower boundObject
(the root node) at the top and descendants at lower
levelsT
(i.e., the method gets objects from the collection) then
it can be of type <? extends T>
(because it can produce more specialized objects)T
(i.e., the method adds objects to the collection) then
it can be of type <? super T>
(because it can consume more generalized objects)