J'ai besoin d'implémenter une fonction qui retourne un TDictionary, sans spécifier les types exacts. La valeur retournée pourrait être un TDictionary<string,Integer>
, TDictionary<string,string>
ou TDictionary<string,Boolean>
Est-il sécuritaire de lancer des génériques en Delphi?
ce que je pourrais déclarer la fonction avec TDictionary comme paramètre de résultat:
function GetMap: TDictionary;
puis jeter la valeur de retour:
type
TMyMapType: TDictionary<string,Integer>;
var
MyMap: TMyMapType:
begin
...
MyMap := GetMap as TMyMapType;
...
end;
Edit: trouvé Il semble qu'il n'y ait aucun moyen de déclarer un type de paramètre résultat "générique" qui serait compatible avec mes trois types de dictionnaire.
On dirait que je besoin de quelque chose comme
type
TMyMapType: TDictionary<string, ?>;
qui est pas (encore?) Possible dans le langage Pascal Objet. En Java, il serait quelque chose comme ceci:
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"));
}
Merci pour cette réponse, après l'avoir lu et http://www.ibm.com/developerworks/java/library/j-jtp04298.html (qui montre une solution possible en utilisant 'help helpers') Je comprends le problème.Dans mon cas simple, une TDictionary avec des objets wrapper primitifs pourrait être une solution de contournement car j'en ai besoin uniquement pour les types de retour. –
mjn