Модульні уроки (2/2)
Дженерики в Java
Generics (Generic Types) було введено в Java, щоб дозволити класам, інтерфейсам і методам працювати з різними типами як параметрами. Це забезпечує безпеку типу під час компіляції та дозволяє уникнути дорогих явних приведення під час виконання.
Загальні класи
Загальний клас визначається за допомогою кутових дужок <T>, де T діє як заповнювач для типу, який буде вказано під час створення екземпляра класу.
public class Box<T> {
private T content;
public void setContent(T content) {
this.content = content;
}
public T getContent() {
return content;
}
}Під час створення об’єкта Box ми вказуємо фактичний тип:
Box<Integer> integerBox = new Box<>();
integerBox.setContent(123);
int value = integerBox.getContent(); // No cast needed!Загальні методи
Ви можете визначити єдиний загальний метод, який може приймати різні параметри типу. Параметр типу розміщується перед типом, який повертає метод.
public static <E> void printArray(E[] elements) {
for (E element : elements) {
System.out.println(element);
}
}Символи підстановки та обмежені типи
Ми можемо обмежити типи, прийнятні загальним, використовуючи ключове слово extends (верхня межа), щоб прийняти певний тип або його підкласи.
public static <T extends Number> void processNumber(T number) {
// Accepts Integer, Double, Float, etc.
System.out.println(number.doubleValue());
}Спробуйте самі
Завершіть загальний клас Box, визначивши getValue(), який повертає T, і setValue(T value), який встановлює значення приватної змінної.
Показати підказку
Напишіть методи з правильною сигнатурою, використовуючи загальний параметр типу `T`.
Рішення доступне після 3 спроб
Створіть статичний загальний метод printArray, який приймає масив типу T[] з назвою array і друкує кожен елемент за допомогою циклу foreach.
Показати підказку
Параметр типу `<T>` має бути розміщений одразу після `static` і перед типом повернення `void`.
Рішення доступне після 3 спроб
Створіть статичний клас StringContainer, який реалізує інтерфейс Container, параметризований за допомогою String. Визначте конструктор, який приймає параметр String, і реалізуйте метод getItem().
Показати підказку
Замініть загальний тип `T` на `String` у сигнатурі класу та в типі повернення `getItem()`.
Рішення доступне після 3 спроб