Ответ
Generics (обобщённое программирование) — это языковая конструкция для обеспечения параметрического полиморфизма. Прямого аналога среди классических GoF-паттернов нет, но концептуально Generics чаще всего устраняют необходимость в паттерне Type-Safe Heterogeneous Container и способствуют реализации Strategy и Template Method.
1. Замена Type-Safe Heterogeneous Container: Без Generics для хранения объектов разных типов в type-safe манере требовался сложный паттерн. Generics решают это элегантно:
// Без Generics: Небезопасно, требует приведения типов.
// С Generics:
public class Box<T> {
private T content;
public void set(T content) { this.content = content; }
public T get() { return content; } // Безопасное приведение
}
Box<String> stringBox = new Box<>();
String value = stringBox.get(); // Тип гарантирован компилятором.
2. Поддержка паттернов:
- Strategy: Generics позволяют параметризовать стратегию типом данных.
interface SortingStrategy<T> { void sort(List<T> items); } - Template Method: Базовый класс может использовать generic-типы для абстрактных операций.
abstract class Processor<T, R> { public final R process(T input) { validate(input); return doProcess(input); // Абстрактный шаг } protected abstract R doProcess(T input); }
Главная цель Generics — обеспечение безопасности типов на этапе компиляции и устранение ручных приведений (casts), что делает код чище и надёжнее.