First that code won't compile because you have to have a name for the class.
The reason that <T super String> won't compile is that super is not allowed when you declare a type variable.
This is the definition of a type variable from the
Java Language Specification 4.4.
TypeParameter:
TypeVariable TypeBoundopt
TypeBound:
extends ClassOrInterfaceType AdditionalBoundListopt
AdditionalBoundList:
AdditionalBound AdditionalBoundList
AdditionalBound
AdditionalBound:
& InterfaceType This is the discussion about using the keyword super with a wildcard.
Unlike ordinary type variables declared in a method signature, no type inference is required when using a wildcard. Consequently, it is permissible to declare lower bounds on a wildcard, using the syntax:
? super B
, where B is a lower bound.