Type erasure is a mapping from types (possibly including parameterized types and type variables) to types (that are never parameterized types or type variables). We write |T| for the erasure of type T. The erasure mapping is defined as follows:
• The erasure of a parameterized type (§4.5) G
> is |G|.
• The erasure of a nested type T
.C is |T|.C.
• The erasure of an array type T
 is |T|
• The erasure of a type variable (§4.4) is the erasure of its leftmost bound.
• The erasure of every other type is the type itself.
Type erasure also maps the signature (§8.4.2) of a constructor or method to a signature that has no parameterized types or type variables. The erasure of a constructor or method signature s is a signature ...