Sobes.tech
Middle

Какво е параметризиран тип?

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.