有没有办法来动态调用方法或在达特类设置的实例变量?(Is there a way to dynami

2019-09-17 03:54发布

我希望能够做这样的事了飞镖类的构造函数:

class Model {

  // ... setting instance variables

  Model(Map fields) {
    fields.forEach((k,v) => this[k] = v);
  }

}

显然,这是不行的,因为this没有一个[]=方法。

有没有一种方法,使其工作或者是它根本就不是做事情的“镖路”? 如果不是的话,你能告诉我什么是解决这个正确的方式?

Answer 1:

目前还没有。 你将不得不等待反射到达特这样的事情(希望)前到达成为可能。 在那之前你最好的选择可能是做一个构造函数。 或者你可以尝试使用类似的JSONObject ,它允许你直接从地图初始化(关于如何工作的解释,检查这个博客文章)。



Answer 2:

您可以使用镜子 :

InstanceMirror im = reflect(theClassInstance);

im.invoke('methodName', ['param 1', 2, 'foo']).then((InstanceMirror value) {
  print(value.reflectee); // This is the return value of the method invocation.
});

所以,你的情况,你可以这样做(因为你必须制定者):

import 'dart:mirrors';

class Model {
  Model(Map fields) {
    InstanceMirror im = reflect(this);
    fields.forEach((k, v) => im.setField(k, v)); // or just fields.forEach(im.setField);
  }
}

对于文档InstanceMirror可能会派上用场。



文章来源: Is there a way to dynamically call a method or set an instance variable in a class in Dart?