Parametric types and virtual types have recently been proposed as
extensions to Java to support genericity. In this paper we examine
both in order to investigate the strengths and weaknesses of each.
We suggest a variant of virtual types which has similar
expressiveness, but supports safe static type checking. This results
in a language in which both parametric types and virtual types are
well-integrated, and which is statically type-safe.