Перейти до основного вмісту
Модуль 6 · Урок 2 із 212/14 у курсі~15 min
Модульні уроки (2/2)

Дженерики в Java

Generics (Generic Types) було введено в Java, щоб дозволити класам, інтерфейсам і методам працювати з різними типами як параметрами. Це забезпечує безпеку типу під час компіляції та дозволяє уникнути дорогих явних приведення під час виконання.

Загальні класи

Загальний клас визначається за допомогою кутових дужок <T>, де T діє як заповнювач для типу, який буде вказано під час створення екземпляра класу.

Java
public class Box<T> {
    private T content;

    public void setContent(T content) {
        this.content = content;
    }

    public T getContent() {
        return content;
    }
}

Під час створення об’єкта Box ми вказуємо фактичний тип:

Java
Box<Integer> integerBox = new Box<>();
integerBox.setContent(123);
int value = integerBox.getContent(); // No cast needed!

Загальні методи

Ви можете визначити єдиний загальний метод, який може приймати різні параметри типу. Параметр типу розміщується перед типом, який повертає метод.

Java
public static <E> void printArray(E[] elements) {
    for (E element : elements) {
        System.out.println(element);
    }
}

Символи підстановки та обмежені типи

Ми можемо обмежити типи, прийнятні загальним, використовуючи ключове слово extends (верхня межа), щоб прийняти певний тип або його підкласи.

Java
public static <T extends Number> void processNumber(T number) {
    // Accepts Integer, Double, Float, etc.
    System.out.println(number.doubleValue());
}

Спробуйте самі

вправи#java.m6.l2.e1
Спроби: 0Завантаження…

Завершіть загальний клас Box, визначивши getValue(), який повертає T, і setValue(T value), який встановлює значення приватної змінної.

Завантаження редактора…
Показати підказку

Напишіть методи з правильною сигнатурою, використовуючи загальний параметр типу `T`.

Рішення доступне після 3 спроб

вправи#java.m6.l2.e2
Спроби: 0Завантаження…

Створіть статичний загальний метод printArray, який приймає масив типу T[] з назвою array і друкує кожен елемент за допомогою циклу foreach.

Завантаження редактора…
Показати підказку

Параметр типу `<T>` має бути розміщений одразу після `static` і перед типом повернення `void`.

Рішення доступне після 3 спроб

вправи#java.m6.l2.e3
Спроби: 0Завантаження…

Створіть статичний клас StringContainer, який реалізує інтерфейс Container, параметризований за допомогою String. Визначте конструктор, який приймає параметр String, і реалізуйте метод getItem().

Завантаження редактора…
Показати підказку

Замініть загальний тип `T` на `String` у сигнатурі класу та в типі повернення `getItem()`.

Рішення доступне після 3 спроб