Просто быстрое обновление старого вопроса ..
Вам не нужно ограничение конструктора, и вы также можете сделать это для объектов с параметрами, используя RTTI, например, (используя RTTI или System.RTTI с XE2)
constructor TMyDataList<T>.Create;
var
ctx: TRttiContext;
begin
inherited Create(true);
self.Add(
ctx.
GetType(TClass(T)).
GetMethod('create').
Invoke(TClass(T),[]).AsType<T>
);
end;
Если у вас есть параметры, просто добавьте их вот так
constructor TMyDataList<T>.Create;
var
ctx: TRttiContext;
begin
inherited Create(true);
self.Add(
ctx.
GetType(TClass(T)).
GetMethod('create').
Invoke(TClass(T),[TValue.From('Test'),TValue.From(42)]).AsType<T>
);
end;