Generics выигрывают у any и overloads для переиспользуемых трансформаций с сохранением типов, но переусложнение (лишние type parameters, глубокая вложенность) бьёт по читаемости, времени компиляции и качеству сообщений об ошибках.
Разбор
- Плюс: одна сигнатура, полный type flow, самоподдерживаемый код.
- Минус over-generic: параметр, встречающийся один раз, — шум без пользы; лучше конкретный тип.
- Явные
<T> у callers — сигнал, что inference не работает; пересмотрите расположение параметра.
- Глубокие generic-библиотеки (формы, query builders) дают точность ценой нечитаемых ошибок — осознанный trade-off.
Итог
Default — generic там, где связываются вход и выход; не generic ради «красоты типов», если связи нет или inference постоянно ломается.