Robert W. Programista
Temat: Typy generyczne - problem
Drodzy forumowicze (mam nadzieję, że nikogo nie uraziłem takim tytułem ;)Mam problem z kodem opartym na typach generycznych. Program kompiluje na Delphi XE.
Poniższy fragment to tylko wycinek, który powoduje problemy. Czy mógłby ktoś podpowiedzieć dlaczego kompilator nie pozwala tego skompilować?
Na "ludzkie oko" powinien wiedzieć, że przekazywana lista to TObjectList<TItem> (klasa TItem przekazana jest jako typ T w klasie TItems) ...
Jakieś wskazówki dlaczego tak jest i jak można z tego wybrnąć?
Będę wdzięczny za wszelką pomoc i podpowiedzi.
Interface :
type
TItem = class
end;
type
IItemsLoader = interface
procedure LoadAll(AList : TObjectList<TItem>);
end;
type
TItemsLoader = class(TInterfacedObject, IItemsLoader)
public
procedure LoadAll(AList : TObjectList<TItem>);
end;
type
IItems<T : TItem> = interface
function LoadAll : TObjectList<T>;
end;
type
TItems<T : TItem> = class(TInterfacedObject, IItems<T>)
private
FItemsLoader : TItemsLoader;
public
constructor Create;
destructor Destroy; override;
function LoadAll : TObjectList<T>;
end;
Implementation:
{ TItemLoader }
procedure TItemsLoader.LoadAll(AList: TObjectList<TItem>);
begin
/// jakieś operacje manipulujące na AList
end;
{ TItems<T> }
constructor TItems<T>.Create;
begin
FItemsLoader := TItemsLoader.Create;
end;
destructor TItems<T>.Destroy;
begin
FItemsLoader.Free;
inherited;
end;
function TItems<T>.LoadAll: TObjectList<T>;
begin
Result := TObjectList<T>.Create();
/// Linia powodująca błąd kompilacji
/// FItemsLoader.LoadAll(Result);
end;