Thema: Delphi Generic und Wildcards

Einzelnen Beitrag anzeigen

Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#5

AW: Generic und Wildcards

  Alt 10. Aug 2012, 14:42
In Java geht das, weil Java, als Runtime, gar keine Generics hat.
Der Java-Compiler benutzt eine gleichnamige Klasse ohne Typenparameter und casted sich überall einen Wolf.

Wenn du es auf einen Nenner runterbringen willst, dann nur über eine Liste eines nicht-generischen Vorfahren oder Interfaces.

Seit D2010 (?) kann Delphi ein bissel RTTI, und seitdem kann man auch verschiedene Typen in einen Typen verallgeimeinern: TValue

Hier ist mal ein Beispiel, falls ich mich nicht klar ausdrücken konnte...
Delphi-Quellcode:
type
  TTask = class abstract
  protected
    function GetValue : TValue; virtual; abstract;
  public
    property Value : TValue read GetValue;
  end;

  TTask<T> = class(TTask)
  private
    FValue: T;
    procedure SetValue(const Value: T);
  protected
    function GetValue : TValue; override;
  public
    property Value : T read FValue write SetValue;
    constructor Create(value : T);
end;

constructor TTask<T>.Create(value: T);
begin
  FValue := value;
end;

function TTask<T>.GetValue: TValue;
begin
  result := TValue.From<T>(Value);
end;

procedure TTask<T>.SetValue(const Value: T);
begin
  FValue := Value;
end;

var
  tasks : TList<TTask>;
  task : TTask;
begin
  tasks := TList<TTask>.Create();
  tasks.Add(TTask<Integer>.Create(1));
  tasks.Add(TTask<String>.Create('Hallo'));
  tasks.Add(TTask<Double>.Create(1.2345));

  for task in tasks do
    Writeln(task.Value.ToString());
end.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat