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 - Fatal编程技术网

Dart 如何将类传递给方法并在那里创建它

Dart 如何将类传递给方法并在那里创建它,dart,Dart,我有这样一个模型的例子: class BirthdayModel { List birthdays; BirthdayModel({ @required this.birthdays, }); factory BirthdayModel.fromJson(json){ return BirthdayModel(birthdays: json['data']); } Map<String, dynamic> toJson() { r

我有这样一个模型的例子:

class BirthdayModel {
  List birthdays;

  BirthdayModel({
    @required this.birthdays,
  });

  factory BirthdayModel.fromJson(json){
    return BirthdayModel(birthdays: json['data']);
  }

  Map<String, dynamic> toJson() {
    return {
      'birthdays': birthdays,
    };
  }
}
然后在此方法中调用所传递类的构造函数或方法

exampleMethod(@required model){
  return model.fromJson(data);
}

可以这样做吗?

不是你写的方式

不能将类作为参数传递。即使是类型参数也只传递类型,所以不能以这种方式使用静态成员

您可以做的是:

T exampleMethodT createModelFromJsondynamic json{ 从JSONDATA返回CreateModel; } 并称之为:

var birthday=exampleMethodBirthdayModel.fromJson; 无法通过编程方式访问fromJson-它不是一个实例方法,因此没有接口。必须显式访问静态方法


我忽略了dart:mirrors,因为您可能无法访问它们。

谢谢,将fromJson方法设置为静态,这解决了我的问题,dart:mirror还可以以更优雅的方式解决我的问题?在为Flutter或web编译时,dart:mirrors库不可用,因此它很少有用。如果您仅在本地运行Dart服务器运行时,则可以使用镜像来获取类类型,并从该类型的声明中查找和调用静态方法。不过,我不会说它优雅。
exampleMethod(@required model){
  return model.fromJson(data);
}