Сочетанием анонимных типов, подклассификации и тем фактом, что Java не полностью удаляет ВСЕ общие объявления.
Если вы посмотрите внимательно, TypeLiteral имеет защищенный конструктор, поэтому вы используете дополнительный {} при построении нового, который создает анонимный подкласс TypeLiteral.
В Java общие декларации сохраняются в объявлениях класса и метода, поэтому, если я пишу это.
public abstract class Class1<T>
{
}
public class Class2 extends Class1<Integer>
{
}
Я действительно могу написать код в Class1, который может понять, что его собственный общий тип - Integer, если Class2 был подклассом.
Ознакомьтесь с API java.lang.Class для соответствующих методов (они имеют общее имя).