Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 从字符串到可用作类型参数的类型_Dart_Types - Fatal编程技术网

Dart 从字符串到可用作类型参数的类型

Dart 从字符串到可用作类型参数的类型,dart,types,Dart,Types,我在Dart中创建了一个Money类,并提出了利用类型系统来确保您不能从美元中减去瑞士法郎(与美元相反)。这非常有效,显著地缩短了我的外观,如下所示: 抽象类货币{ 常量货币(this.precision,this.code); 最终整数精度; 最终字符串代码; } 瑞士法郎类货币{ 常数Chf():super(2,'Chf'); } 美元类货币{ const Usd():super(2,“Usd”); } 阶级金钱{ 货币减去(货币其他){…} } 从瑞士法郎中减去美元是不可能的。伟大的(更

我在Dart中创建了一个
Money
类,并提出了利用类型系统来确保您不能从美元中减去瑞士法郎(与美元相反)。这非常有效,显著地缩短了我的外观,如下所示:

抽象类货币{
常量货币(this.precision,this.code);
最终整数精度;
最终字符串代码;
}
瑞士法郎类货币{
常数Chf():super(2,'Chf');
}
美元类货币{
const Usd():super(2,“Usd”);
}
阶级金钱{
货币减去(货币其他){…}
}
从瑞士法郎中减去美元是不可能的。伟大的(更完整的代码。) 但我收到的JSON有效负载中包含货币表示。我现在需要从字符串“CHF”转到
Money
实例。我不知道该怎么做

我需要将(货币代码)字符串映射到
类型

final t=convertStringToType('CHF');

最终m1=货币(100);// 类型参数不能从头创建,它们必须是实际类型或其他类型变量。因此,如果需要将
作为类型参数,则需要在程序中的某个位置将
作为实际的类型参数。那你就可以靠它了

我会这样做:

T callWithCurrency(字符串名称,T action()){
if(name==“CHF”)返回操作();
如果(名称==“USD”)返回操作();
...
抛出ArgumentError.value(名称,“名称”,“非可识别货币”);
}
然后您可以将其用作:

final Money m1=callWithCurrency(“瑞士法郎”),()=>Money(100));

这样使用闭包是一种多么有趣的方法。他妈的很遗憾,我们不能合成类型参数。你不知道原因吗?
switch(code) {
  case 'CHF':
    return Money<Chf>(100);
  ...
}