我需要實現一個函數,它返回一個TDictionary,而不指定確切的類型。返回值可以是一個TDictionary<string,Integer>
,TDictionary<string,string>
或TDictionary<string,Boolean>
在Delphi中安裝泛型是否安全?
難道我宣佈函數TDictionary作爲結果參數:
function GetMap: TDictionary;
,然後將返回值:
type
TMyMapType: TDictionary<string,Integer>;
var
MyMap: TMyMapType:
begin
...
MyMap := GetMap as TMyMapType;
...
end;
編輯:發現似乎沒有辦法聲明與我的三種字典類型兼容的「通用」結果參數類型。
它看起來像我需要在Object Pascal語言像
type
TMyMapType: TDictionary<string, ?>;
這是不(沒?)可能的。在Java中,它會是這樣的:
static Map<String, Integer>getIntegerMap() {
Map<String, Integer> result = new TreeMap<String, Integer>() {};
result.put("foo", Integer.valueOf(42));
return result;
}
static Map<String, ?> getMap() {
return getIntegerMap();
}
public static void main(String[] args) {
System.out.println(getMap().get("foo"));
}
感謝您在閱讀本文和http://www.ibm.com/developerworks/java/library/j-jtp04298.html(其中顯示了使用'capture helpers'的可能解決方案'')之後,我理解了這個問題。在我的簡單情況下,具有原始包裝器對象的TDictionary可能是一種解決方法,因爲我只需要它用於返回類型。 –
mjn
2009-12-07 16:05:57