Middle
Co jsou generika?
sobes.tech AI
Odpověď od AI
Generika (Obecné typy) jsou mechanismus, který umožňuje psát třídy, rozhraní a metody, které pracují s daty různých typů, přičemž zajišťují typovou bezpečnost během kompilace. Umožňují vytvářet znovupoužitelné komponenty, které mohou pracovat s jakýmkoli typem dat, aniž by ztratily informace o typu, což minimalizuje chyby při převodu typů při běhu.
Hlavní výhody:
- Typová bezpečnost: Kompilátor kontroluje správnost použití typů ve všeobecných strukturách.
- Zmenšení množství kódu: Jedna obecná třída nebo metoda může pracovat s mnoha typy.
- Čitelnost kódu: Je jasné, s jakými typy komponent pracuje.
- Zlepšení výkonu (v některých případech): Absence potřeby převodu typů při běhu může mírně zlepšit výkon.
Příklad (Java):
// Příklad obecné třídy
class Box<T> {
private T content;
public void setContent(T content) {
this.content = content;
}
public T getContent() {
return content;
}
}
// Použití obecné třídy s různými typy
Box<Integer> integerBox = new Box<>();
integerBox.setContent(10);
int value = integerBox.getContent(); // Typová bezpečnost, není potřeba převod
Box<String> stringBox = new Box<>();
stringBox.setContent("Hello");
String text = stringBox.getContent(); // Typová bezpečnost, není potřeba převod
Příklad (Python - Type Hinting, přibližně k 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
# Použití s type hinting
integer_box: Box[int] = Box()
integer_box.set_content(10)
value: int | None = integer_box.get_content() # Pomáhá nástrojům pro statickou analýzu
string_box: Box[str] = Box()
string_box.set_content("Hello")
text: str | None = string_box.get_content() # Pomáhá nástrojům pro statickou analýzu