We already know (we must know) that String class can not be extended because it is declared as final. However it is ok for the compiler to use extends key work with a final class, like String, if we declare a generic class, like this:
220.127.116.11 final Classes A class can be declared final if its definition is complete and no subclasses are desired or required. A compile-time error occurs if the name of a final class appears in the extends clause (�8.1.4) of another class declaration; this implies that a final class cannot have any subclasses. A compile-time error occurs if a class is declared both final and abstract, because the implementation of such a class could never be completed (�18.104.22.168).
, in your example, says: The T might be a sub-class of String. It�s not a class declaration.