Sobes.tech
Middle

Какво са обобщенията (Generics)?

sobes.tech AI

Отговор от AI

Генериците (Общи типове) са механизъм, който позволява да се пишат класове, интерфейси и методи, които работят с данни от различни типове, като същевременно осигуряват типова безопасност по време на компилация. Те позволяват създаването на многократно използваеми компоненти, които могат да работят с всеки тип данни, без да губят информация за типа, което минимизира грешките при преобразуване на типове по време на изпълнение.

Основни предимства:

  • Типова безопасност: Компилаторът проверява правилната употреба на типовете в обобщените структури.
  • Намаляване на кода: Един обобщен клас или метод може да работи с множество типове.
  • Четливост на кода: Ясно е с кои типове работи компонентът.
  • Подобряване на производителността (в някои случаи): Липсата на необходимост от преобразуване на типове по време на изпълнение може да подобри леко производителността.

Пример (Java):

// Пример за обобщен клас
class Box<T> {
    private T content;

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

    public T getContent() {
        return content;
    }
}

// Използване на обобщен клас с различни типове
Box<Integer> integerBox = new Box<>();
integerBox.setContent(10);
int value = integerBox.getContent(); // Типова безопасност, не е необходимо преобразуване

Box<String> stringBox = new Box<>();
stringBox.setContent("Hello");
String text = stringBox.getContent(); // Типова безопасност, не е необходимо преобразуване

Пример (Python - Type Hinting, приближен към Generics):

from typing import TypeVar, Generic

T = TypeVar('T')

class Box(Generic[T]):
    def __init__(self) -> None:
        self._content: T | None = None

    def set_content(self, content: T) -> None:
        self._content = content

    def get_content(self) -> T | None:
        return self._content

# Използване с type hinting
integer_box: Box[int] = Box()
integer_box.set_content(10)
value: int | None = integer_box.get_content() # Помага на инструментите за статичен анализ

string_box: Box[str] = Box()
string_box.set_content("Hello")
text: str | None = string_box.get_content() # Помага на инструментите за статичен анализ