Middle
Co jsou obecné typy (Generics)?
sobes.tech AI
Odpověď od AI
Obecné typy (Generics) jsou prostředkem parametrizace typů, který umožňuje vytvářet univerzální třídy, rozhraní a metody. Umožňují pracovat s různými datovými typy bez ztráty typové bezpečnosti během kompilace.
Hlavní výhody používání generických typů:
- Typová bezpečnost: Kompilátor kontroluje kompatibilitu typů v době kompilace, což pomáhá odhalit potenciální chyby před spuštěním programu.
- Snížení duplicitního kódu: Můžete vytvořit jednu třídu nebo metodu, která funguje s různými typy, místo psaní samostatného kódu pro každý typ.
- Lepší čitelnost kódu: Použití generických typů činí kód srozumitelnějším tím, že ukazuje, s jakými typy dat pracuje.
- Odstranění potřeby explicitního přetypování (casting): Při práci s generickými kolekcemi není nutné explicitně převádět prvky na požadovaný typ při jejich extrakci.
Příklad použití v Javě:
// Vytvoření seznamu, který může obsahovat pouze řetězce
List<String> stringList = new ArrayList<>();
stringList.add("ahoj");
// stringList.add(123); // Chyba kompilace, protože 123 není řetězec
// Získání prvku bez potřeby přetypování
String prvníPrvek = stringList.get(0);
Příklad použití v C#:
// Vytvoření seznamu, který může obsahovat pouze celá čísla
List<int> intList = new List<int>();
intList.Add(10);
// intList.Add("svět"); // Chyba kompilace, protože "svět" není celé číslo
// Získání prvku bez potřeby přetypování
int číslo = intList[0];
Příklad generické třídy:
// Generická třída Box, která může obsahovat objekt libovolného typu T
public class Box<T> {
private T item;
public void setItem(T item) {
this.item = item;
}
public T getItem() {
return item;
}
}
// Použití generické třídy
Box<Integer> intBox = new Box<>();
intBox.setItem(123);
int hodnota = intBox.getItem(); // Není potřeba přetypování
Box<String> stringBox = new Box<>();
stringBox.setItem("test");
String hodnota = stringBox.getItem(); // Není potřeba přetypování
Tímto jsou generické typy mocným nástrojem pro tvorbu flexibilního, bezpečného a snadno udržovatelného kódu.