2013-11-04 2 views
2

제네릭 인터페이스를 반환해야하는 메소드가 있습니다. 델파이에서 메서드를 만들려고했습니다. 그러나 그것이 어떻게 쓰여 져야하는지 확신 할 수 없는가? 나를 도울 수있는 사람이 있습니까? 다음은 작동 내가 자바에서 변경 한 예입니다 : 자바 코드를 델파이로 변환 할 때의 문제

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

그런 다음에 델파이 동일한 작업을 수행하려고 ..하지만이 동작하지 않습니다?

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; 
+0

어떤 오류가 발생 했습니까? –

+0

E2003 선언되지 않은 식별자 : 'T' – Godfather75

+0

IStandardDataProvider는 다른 인터페이스의 기본 인터페이스입니다. IStandardDataProvider = 인터페이스 및 하위 요소는 IEventDataProvider = interface (IStandardDataProvider ) – Godfather75

답변

6

델파이 일반 제약은 와일드 카드를 지원하지 않습니다. 가장 가까운 관리 대상은 두 가지 일반 매개 변수입니다. 함수는 다음과 같습니다.

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

맞습니다 .. 작동하지 않습니다 ... hmm – Godfather75

+0

어, 아니, 괜찮습니다. –

+0

@MatheusFreitas 그의 이전 질문에 XE4가 태그되었습니다. –