So, nach einigem experimentieren mit den Delphi2009 Generics bin ich zu folgendem Ergebnis gekommen:
1. Wenn du Arrays als Feldvariablen einer generischen Klasse verwenden möchtest, definiere sie vorher als eigenen Typen.
Delphi-Quellcode:
type
TMyIntegerArray = Array of Integer;
TMyGenericClass<T> = class(TObject)
private
FIntegerArray: TMyIntegerArray;
public
constructor Create;
// etc
end;
2. Wenn du eine generische Klasse von einer generischen Klasse verwenden möchtest, dann baue einen Wrapper um die innere generische Klasse.
Delphi-Quellcode:
type
TMyDummieClass = class(TObject)
constructor Create;
// etc
end;
TMyGenericClass<T> = class(TOjbect)
constructor Create;
// etc
end;
// wrapper klasse für TMyGenericClass<TMyDummieClass>
TMyGenericClassWrapper = class(TObject)
private
FMyGenericClass: TMyGenericClass<TMyDummieClass>;
public
constructor Create; // ruft auf FMyGenericClass := TMyGenericClass<TMyDummieClass>.Create;
// etc
end;
TMyOtherGenericClass<T> = class(TObject)
constructor Create;
// etc
end;
Statt
Delphi-Quellcode:
var
LLocalVariable: TMyOtherGenericClass<TMyGenericClass<TMyDummieClass>>;
verwendet man einfach
Delphi-Quellcode:
var
LLocalVariable: TMyOtherGenericClass<TMyGenericClassWrapper>;
Das ist zwar wenig elegant, weil ich für jeden Typ den ich in die innere generische Klasse stecke einen neuen Wrapper schreiben muss, andererseits erhalte ich jetzt keine kryptischen Fehlermeldungen vom Compiler mehr.