Все зависит от решаемых задач.
Но если мы говорим о хранилище значений, то такой вариант хорош.
Плюсы:
Строгая типизация. Мы будем обращаться и работать со значением конкретного конечно типа без дополнительных приведений
Минусы:
Реализация дженериков порождает отдельный тип класса для каждого параметра шаблона. Поэтому количество памяти будет задействовано больше (если есть критерий по памяти). Например, если вы хотите хранить значения 10 типов, то вы получите на выходе 10 классов.
С учетом того, что как-то так складывается, что в Delphi разработчики не особо заботятся о количестве потребляемой памяти, то этот вариант будет чаще использоваться.
Другой вариант, использования RTTI для хранения значения с использованием TValue.
TSimpleObject = class(TObject)
constructor Create(wrappedPrimitive : TValue);
property Value : TValue read SetValue;
Плюсы:
Один класс на все типы
Недостатки:
Требуется дополнительный код по проверки и приведению TValue к нужному типу.
Снижается скорость обращения.
P.S. Был еще вариант с Variant, но я бы его назвал устаревшим, после появления TValue.