首页 > 解决方案 > 如何将类传递给方法并在那里创建它

问题描述

我有这样一个模型示例:

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

是否有可能做到这一点?

标签: dart

解决方案


不是你写的方式。

您不能将作为参数传递。甚至类型参数也只传递types,所以你不能那样使用静态成员。

你可以做的是:

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

并将其称为:

var birthday = exampleMethod(BirthdayModel.fromJson);

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

(我忽略dart:mirrors了,因为你可能无法访问这些)。


推荐阅读