Sobes.tech
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.