我希望能够从通用函数内部构造一个对象。我尝试了以下方法:
abstract class Interface
{
Interface.func(int x);
}
class Test implements Interface
{
Test.func(int x){}
}
T make<T extends Interface>(int x)
{
// the next line doesn't work
return T.func(x);
}
但是,这不起作用。而且我收到以下错误消息:The method 'func' isn't defined for the class 'Type'
。
注意:我无法使用镜子,因为我使用的是带有飞镖的飞镖。
答案 0 :(得分:2)
Dart不支持从泛型类型参数实例化。想要使用命名构造函数还是默认构造函数都没关系(T()
也无效)。
服务器上可能有一种方法,其中dart:mirrors
(反射)可用(尚未尝试过),但Flutter或浏览器中没有。
您需要维护类型到工厂功能的映射
void main() async {
final double abc = 1.4;
int x = abc.toInt();
print(int.tryParse(abc.toString().split('.')[1]));
// int y = abc - x;
final t = make<Test>(5);
print(t);
}
abstract class Interface {
Interface.func(int x);
}
class Test implements Interface {
Test.func(int x) {}
}
/// Add factory functions for every Type and every constructor you want to make available to `make`
final factories = <Type, Function>{Test: (int x) => Test.func(x)};
T make<T extends Interface>(int x) {
return factories[T](x);
}