Как уже упоминалось ранее,
в Java нет механизма определения типа.
Я также не поддерживаю «поддельные классы» в целом, но здесь не должно быть общего строгого практического правила:
если ваш код, например, снова и снова использует «родовой тип», например:
Map<String, List<Integer>>
Вы должны определенно рассмотреть вопрос о наличии подкласса для этой цели.
Другой подход, который можно рассмотреть, например, иметь в своем коде замедление, подобное:
//@Alias Map<String, List<Integer>> NameToNumbers;
А затем используйте в своем коде NameToNumbers и задайте задачу перед компилятором (ANT / Gradle / Maven) для обработки и генерации соответствующего кода Java.
Я знаю, что для некоторых читателей этого ответа это может звучать странно, но это то, сколько фреймворков реализовали «аннотации» до JDK 5, это то, чем занимается проект lombok и другие фреймворки.