Что такое параметризованный тип?
Ответ от нейросети
sobes.tech AI
Параметризованный тип в Java, часто называемый дженериком (Generics), позволяет определить классы, интерфейсы и методы с параметрами типов. Это повышает безопасность типов во время compile-time и устраняет необходимость в приведениях типов.
Примером параметризованного типа является List<T>, где T является параметром типа, который будет заменен фактическим типом при использовании List.
Преимущества параметризованных типов:
- Контроль типов на этапе компиляции: Ошибки несоответствия типов обнаруживаются во время компиляции, а не выполнения.
- Устранение приведений типов: Нет необходимости в явных приведениях типов при работе с элементами коллекций.
- Повышенная читаемость кода: Четко видно, с какими типами данных работает коллекция или класс.
Синтаксис:
Объявление класса с параметром типа:
// T - параметр типа
class MyGenericClass<T> {
private T value;
public MyGenericClass(T value) {
this.value = value;
}
public T getValue() {
return this.value;
}
}
Создание экземпляра параметризованного типа:
// Создание экземпляра с типом String
MyGenericClass<String> stringInstance = new MyGenericClass<>("Hello");
// Создание экземпляра с типом Integer
MyGenericClass<Integer> integerInstance = new MyGenericClass<>(123);
Wildcards (подстановочные знаки):
Используются для повышения гибкости при работе с параметризованными типами в сигнатурах методов.
?(Unbounded Wildcard): Означает любой тип.? extends UpperBound(Bounded Wildcard - верхняя граница): Означает любой тип, который является подтипомUpperBound.? super LowerBound(Bounded Wildcard - нижняя граница): Означает любой тип, который является супертипомLowerBound.
Пример использования bounded wildcard:
import java.util.List;
// Метод принимает список любых типов, которые являются подтипами Number
public void processNumbers(List<? extends Number> numbers) {
for (Number number : numbers) {
System.out.println(number);
}
}
Параметризованные типы стали стандартной частью Java с версии 5.