Где в Java применяются Generics (обобщенные типы)?

«Где в Java применяются Generics (обобщенные типы)?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Generics используются для создания типобезопасных классов, интерфейсов и методов, работающих с различными типами данных.

Основные области применения:

  1. Коллекции (Java Collections Framework): Обеспечивают безопасность типов при хранении элементов.
    List<String> strings = new ArrayList<>(); // Может содержать только String
    Map<Integer, String> map = new HashMap<>();
  2. Классы и интерфейсы: Позволяют параметризовать тип данных, с которым работает класс.
    public class Box<T> {
        private T content;
        public void set(T content) { this.content = content; }
        public T get() { return content; }
    }
    Box<Integer> integerBox = new Box<>();
  3. Методы: Можно объявлять обобщенные методы даже в не-generic классах.
    public static <T> T getFirstElement(List<T> list) {
        return list.get(0);
    }
  4. Функциональные интерфейсы (Java 8+): Например, Function<T, R>, Predicate<T>.

Преимущества:

  • Безопасность типов: Исключаются ошибки ClassCastException на этапе компиляции.
  • Устранение привидений типов (cast): Код становится чище.
  • Повторное использование: Один алгоритм может работать с разными типами.