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