The documentation for the \"public final Class> getClass()\" method of Object says:
The actual result type is Class extends |X|> where
Let's consider the following example:
List test = new ArrayList();
Class extends List> clazz = test.getClass();
the static type of test (the expression on which getClass() is called) is List of which the erasure is List (see type erasure). Note that the dynamic (or runtime) type of test is ArrayList, and the runtime type of clazz will be Class.
So, Class extends |X|> in this case is Class extends List>.