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