Типичным примером являются коллекции. например набор типа T, как метод Add (T) и метод T get (). Один и тот же код, разные типы безопасных коллекций.
C ++, D, Ada и другие имеют шаблоны, расширенный набор обобщений, которые делают это немного по-другому. Ошибка дает тот же конечный результат (а затем и некоторые).
IIRC В Java есть дженерики, но я не делаю Java.