Kurz erklärt
Eine Möglichkeit, Klassen und Methoden so zu schreiben, dass sie mit unterschiedlichen Datentypen arbeiten können, ohne für jeden Typ eine eigene, fast identische Version zu schreiben.
Genauer
Eine generische Liste kann z. B. mit Liste<Zahl> oder Liste<Text> genutzt werden, wobei derselbe Klassencode dahintersteckt — der konkrete Typ wird beim Verwenden festgelegt. Der große Vorteil gegenüber einer Liste, die einfach alles akzeptiert: Fehler durch falsche Typen werden bereits beim Kompilieren erkannt, statt erst zur Laufzeit einen Absturz zu verursachen.