Middle
Co jsou Generics a k čemu slouží?
sobes.tech AI
Odpověď od AI
Generika v Javě umožňují vytvářet třídy, rozhraní a metody, které pracují s parametrizovanými typy.
Hlavní účel generik:
- Zvýšení bezpečnosti typů: Kompilátor kontroluje typy v době kompilace, čímž předchází
ClassCastExceptionpři běhu. - Odstranění nutnosti převodů typů: Není třeba ručně převádět typy při získávání prvků z kolekcí.
- Vytváření flexibilnějšího a znovupoužitelného kódu: Můžete psát obecné algoritmy a datové struktury, které jsou použitelné pro různé typy dat.
Příklad bez generik:
// Před Java 5
import java.util.ArrayList;
import java.util.List;
public class OldStyleList {
public static void main(String[] args) {
List list = new ArrayList(); // bez typování
list.add("ahoj");
list.add(123); // lze přidat jakýkoli objekt
String s = (String) list.get(0); // je potřeba převod typu
Integer i = (Integer) list.get(1); // je potřeba převod typu
// Může dojít k chybě převodu typu
// String error = (String) list.get(1); // ClassCastException
System.out.println(s);
System.out.println(i);
}
}
Příklad s generiky:
// S generiky
import java.util.ArrayList;
import java.util.List;
public class GenericList {
public static void main(String[] args) {
List<String> list = new ArrayList<>(); // seznam řetězců
list.add("ahoj");
// list.add(123); // chyba kompilace - nelze přidat Integer
String s = list.get(0); // není potřeba převod typu
// Nelze přidat jiný typ, což zabraňuje chybám
// List<Integer> intList = new ArrayList<>();
// intList.add("svět"); // chyba kompilace
System.out.println(s);
}
}
Generika se také používají v:
- Třídách:
ArrayList<E>,HashMap<K, V> - Rozhraních:
List<E>,Map<K, V> - Metodách:
<T> void printArray(T[] array) - Omezeních typů:
<T extends Comparable<T>>(omezení na typy implementujícíComparable)
Implementace generik v Javě je založena na "vymazání typů" (type erasure) v době kompilace. To znamená, že informace o generických typech jsou odstraněny a při běhu JVM pracuje s holými typy. To zajišťuje zpětnou kompatibilitu s staršími verzemi Javy, ale má určitá omezení.