"Generics" ist ein wenig hilfreicher Name. Besser wäre "parametrisierbarer Typ". Soll heißen, du bestimmst den Typ einer Definition durch einen Parameter.
Du definierst deine Klasse ganz allgemein: TList<T> und implementierst deine Methoden + wenn du den Typ im Code brauchst, benutzt du <T>.
Brauchst du dann einen konkreten Typ, übergibst du den konkreten Typ: TList<integer>, TList<Float>, TList<String>, aber natürlich auch TList<TDataset> etc.
Den Vorteil siehst du schon?
Siehe auch:
https://de.wikipedia.org/wiki/Generischer_Typ
http://docwiki.embarcadero.com/RADSt...n_von_Generics
https://www.thoughtco.com/understand...delphi-1058229