Вы можете использовать универсальный в любом месте, где вам нужен параметр типа , то есть тип, который должен быть одинаковым в некотором коде, но в большей или меньшей степени не указан.
Например, один из моих игрушечных проектов - написать алгоритмы для компьютерной алгебры в Java. Это интересно как для математических алгоритмов, так и для того, чтобы подвергать дженерики Java стресс-тесту.
В этом проекте у меня есть различные интерфейсы для алгебраических структур, таких как кольца и поля и их соответствующие элементы, и конкретные классы, например. для целых чисел или для многочленов над кольцом, где кольцо является параметром типа. Это работает, но местами становится несколько утомительно. До сих пор запись представляет собой тип перед переменной, который охватывает две полные строки по 80 символов в алгоритме проверки неприводимости полиномов. Главный виновник в том, что вы не можете дать сложному типу собственное имя.