如何在Delphi 10.2中为通用接口创建列表?

时间:2018-08-14 23:17:43

标签: delphi generics delphi-10.2-tokyo

我想为通用接口定义一个列表类型。存储通用类型数据的树实现需要它。不幸的是,简单的解决方案不起作用:

uses
  Generics.Collections;

type
  ITreeNode<T> = interface;

  TTreeNodeList<T> = TList<ITreeNode<T>>;

  ITreeNode<T> = interface
    ['{BC384FDB-4509-44D3-8946-E7ECD4417C4D}']
    //...
    function getChildNodes : TTreeNodeList<T>;
    function getData : T;
  end;

  TTreeNode<T> = class ( TInterfacedObject, ITreeNode<T> )
    //...
  end;

procedure foo;
var
  node : ITreeNode<cardinal>;
begin
  node := TTreeNode<cardinal>.create;
  //...
end;

有什么技巧可以实现吗?

1 个答案:

答案 0 :(得分:5)

好。我找到了解决方法:

TTreeNodeList<T> = class ( TList<ITreeNode<T>> )
end;

不是

TTreeNodeList<T> = TTreeNodeList<ITreeNode<T>>;