Какво е параметризиран тип?
sobes.tech AI
Отговор от AI
Типът с параметри в Java, често наричан генерик (Generics), позволява да дефинирате класове, интерфейси и методи с параметри на типове. Това увеличава безопасността на типовете по време на компилация и елиминира необходимостта от преобразуване на типове.
Пример за тип с параметри е 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 (заместващи знаци):
Използват се за увеличаване на гъвкавостта при работа с параметризирани типове в сигнатурите на методи.
?(Неограничен заместващ знак): Означава всеки тип.? extends UpperBound(Ограничен заместващ знак - горна граница): Означава всеки тип, който е подклас наUpperBound.? super LowerBound(Ограничен заместващ знак - долна граница): Означава всеки тип, който е супертрупа наLowerBound.
Пример за използване на ограничен заместващ знак с горна граница:
import java.util.List;
// Метод, който приема списък от всеки тип, който е подклас на Number
public void processNumbers(List<? extends Number> numbers) {
for (Number number : numbers) {
System.out.println(number);
}
}
Типовете с параметри са станали стандартна част от Java от версия 5.