如何从Dart / Flutter中的泛型函数调用命名构造函数

阿缅

我希望能够从通用函数内部构造一个对象。我尝试了以下方法:

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'

注意:我不能使用镜子,因为我正在使用带有飞镖的飞镖。

贡特·佐赫鲍尔(GünterZöchbauer)

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);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Swift中调用歧义泛型函数?

如何强制对某些构造函数/函数的调用使用命名参数?

java中的泛型函数如何实现?

迅捷:如何编写调用专门函数的泛型函数

如何检查是否在dart中使用命名构造函数创建了元素?

如何在Dart中调用超级构造函数?

如何从泛型函数调用最精确的重载?

如何在Swift 3中使用关联类型的参数调用泛型函数

Dart中命名构造函数是否是生成构造函数的子集?

如何使泛型函数值?

如何使Dart中需要超级构造函数

Dart中构造函数命名参数的继承

Dart-如何在子类的构造函数中调用超类的工厂构造函数?

Flutter Dart构造函数

如何使用命名参数并防止使用默认构造函数?

如何从JavaScript调用Dart函数

如何在TypeScript中显式键入泛型函数?

如何在Kotlin中创建泛型函数

如何在TS和TypeORM中创建泛型函数?

Typescript 如何限制泛型函数中的子类?

我如何在泛型函数中引用“ typeof T”?

如何使用 rust 中的泛型函数修复错误

Dart(Flutter)中的常量构造函数

转到:调用函数时如何使用命名参数?

如何使用命名函数调用attach / detach事件?

Jenkinsfile:如何使用命名参数调用groovy函数

如何在scala中实现一个泛型函数,该泛型函数可以添加和求和参数?

如何在Swift中使用函数参数消除对该泛型函数的调用的歧义?

如何在不知道类型的情况下从泛型函数调用函数?