【问题标题】:Problems with converting Java code to delphi将Java代码转换为delphi的问题
【发布时间】:2013-11-04 17:56:50
【问题描述】:

我有一个必须返回通用接口的方法。曾尝试在delphi中制作该方法。但是不确定应该如何写?有谁能帮助我吗? 这是我用 Java 制作的一个例子:

public < T  extends StandardDataProvider<?>> T GetDataProvider(String dataProviderName) {
    if (dataproviders == null)
        buildDataProviderMap();
    if (dataproviders.containsKey(dataProviderName)) {
        return (T) dataproviders.get(dataProviderName);
    } else
        return null;
}

然后尝试在delphi中做同样的事情..但不能让它工作?

function TLocalDataProviderFactory. GetDataProvider(DataProviderName: string): IStandardDataProvider;  // Shows errors here? 
begin
  if not Assigned(DataProvider) then
    BuildDataProviderMap;
  if DataProvider.ContainsKey(DataProviderName) then
  begin
    Result := DataProvider.Items[DataProviderName];
  end
  else
  begin
    Result:= nil;
  end;
end;

【问题讨论】:

  • 您遇到什么错误?
  • E2003 未声明的标识符:'T'
  • IStandardDataProvider 是其他接口的基础接口。 IStandardDataProvider = 接口,子是 IEventDataProvider = interface (IStandardDataProvider )

标签: java delphi delphi-xe4


【解决方案1】:

Delphi 通用约束不支持通配符。因此,您可以管理的最接近的涉及两个通用参数。该函数如下所示:

function GetDataProvider<S; T: IStandardDataProvider<S>>(...): T;

【讨论】:

  • 呃,不,它编译得很好。
  • @MatheusFreitas 他之前的 Q 被标记为 XE4。
  • @Godfather75 您是否设法修复了代码中的任何问题并使其编译?
  • 不,我的代码仍然有问题。我已经尝试过您的解决方案。但它只是行不通吗?如果我不使用泛型可以让它工作..但是我只能访问 IStandardDataProvider 而不能访问从它继承的其他接口
  • “它不起作用”是什么意思?我使代码编译得很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-26
  • 2011-01-04
  • 1970-01-01
  • 2014-01-15
相关资源
最近更新 更多