如何将类传递给方法并在其中创建

时间:2020-03-10 12:39:44

标签: dart

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

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(model: BirthdayModel);

然后在此方法中调用传递的类的构造函数或方法

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

可以这样做吗?

1 个答案:

答案 0 :(得分:1)

不是您编写的方式。

您不能将 class 作为参数传递。甚至类型参数也只能传递 types ,因此您不能以这种方式使用静态成员。

您可以做的是:

T exampleMethod<T>(T createModelFromJson(dynamic json)){
  return createModelFromJson(data);
}

并命名为:

var birthday = exampleMethod(BirthdayModel.fromJson);

无法以编程方式访问fromJson-它不是实例方法,因此没有接口。静态方法必须显式访问。

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