0Pricing
Java Academy · Урок

Обобщённые методы и классы

Определяйте обобщённые классы с параметрами типов и пишите обобщённые методы, указывая <T> перед возвращаемым типом. Узнайте, где помогает вывод типов.

«Обобщённые методы и классы» — бесплатный урок Java Academy на CoddyKit. Это урок 3 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 3 уроков всего.

Обзор

Обобщённые классы позволяют повторно использовать одну конструкцию для разных типов, а обобщённые методы работают с параметрами типов даже внутри необобщённых классов. Мы создадим небольшой Pair<T,U>, метод swap и статическую фабрику.

Зачем нужны обобщённые классы?

Зачем делать класс обобщённым?

  • Одна конструкция, много типов: уменьшает дублирование.
  • Безопасность типов: неверные типы обнаруживаются при компиляции.
  • Чистый API: в возвращаемых значениях не нужны приведения типов.

Код: Pair<T,U>

Pair<T,U> позволяет использовать один и тот же класс с двумя разными типами. Приведения типов не нужны, а API остаётся понятным.

public class Main {
  // Simple generic data holder with two type parameters
  static class Pair<T, U> {
    private final T first;
    private final U second;
    Pair(T first, U second) { this.first = first; this.second = second; }
    T first() { return first; }
    U second() { return second; }
    public String toString() { return "Pair(" + first + ", " + second + ")"; }
  }

  public static void main(String[] args) {
    Pair<String, Integer> p = new Pair<>("age", 21);
    System.out.println(p);
    System.out.println(p.first() + " -> " + p.second());
  }
}

Обобщённые методы: сигнатура

Обобщённые методы работают независимо от того, является ли класс обобщённым. Сигнатура: <T> returnType... Например: <T> T firstOrDefault(T[] arr, T def).

Код: обобщённый swap

<T> объявлен на уровне метода, поэтому метод работает с разными массивами. При вызове тип не указывался: компилятор вывел его самостоятельно.

public class Main {
  // Generic utility method: swap two indices of an array of any reference type
  static <T> void swap(T[] arr, int i, int j) {
    T tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp;
  }

  public static void main(String[] args) {
    String[] names = { "Ada", "Bob", "Cyd" };
    swap(names, 0, 2); // works with String[]
    for (int k = 0; k < names.length; k = k + 1) {
      System.out.print(names[k] + (k < names.length - 1 ? " " : "\n"));
    }
  }
}

Код: статическая обобщённая фабрика

Статическая обобщённая фабрика: при вызове of(T v) тип выводится автоматически. Использование получается чистым и понятным.

public class Main {
  static class Box<T> {
    private final T value;
    private Box(T v) { this.value = v; }
    public T get() { return value; }
    // Static generic factory method inside a generic class
    public static <T> Box<T> of(T v) { return new Box<T>(v); }
  }

  public static void main(String[] args) {
    // Type inferred by diamond and method generic parameter
    Box<Integer> bi = Box.of(42);
    Box<String> bs = Box.of("hi");
    System.out.println(bi.get() + 1);
    System.out.println(bs.get().toUpperCase());
  }
}

Проверка обобщённых методов

Быстрая проверка: как правильно объявить обобщённый метод?

Повторение

Повторение: обобщённые классы (Pair<T,U>) уменьшают дублирование, а обобщённые методы (сигнатура <T>) работают независимо от класса. Вывод типа упрощает вызовы.

Часто задаваемые вопросы

Урок «Обобщённые методы и классы» бесплатный?

Да — полный текст урока «Обобщённые методы и классы» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 3 уроков всего.

Чему я научусь в уроке «Обобщённые методы и классы»?

Определяйте обобщённые классы с параметрами типов и пишите обобщённые методы, указывая <T> перед возвращаемым типом. Узнайте, где помогает вывод типов. Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Java Academy?

Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 3.

Сколько времени занимает урок «Обобщённые методы и классы»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Java Academy?

Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Интерфейсы на практике
  2. Основы обобщений (T, вывод типов)
  3. Обобщённые методы и классы
← Назад к Java Academy