我希望能够用 Dart 类构造函数做这样的事情:
class Model {
// ... setting instance variables
Model(Map fields) {
fields.forEach((k,v) => this[k] = v);
}
}
显然,这是行不通的,因为this
没有[]=
方法。
有没有办法让它发挥作用,或者它根本就不是做事的“飞镖方式”?如果不是,你能告诉我什么是解决这个问题的正确方法吗?
我希望能够用 Dart 类构造函数做这样的事情:
class Model {
// ... setting instance variables
Model(Map fields) {
fields.forEach((k,v) => this[k] = v);
}
}
显然,这是行不通的,因为this
没有[]=
方法。
有没有办法让它发挥作用,或者它根本就不是做事的“飞镖方式”?如果不是,你能告诉我什么是解决这个问题的正确方法吗?
您可以使用镜子:
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
可能会派上用场。
目前没有。在这样的事情(希望如此)成为可能之前,您将不得不等待反射到达 Dart。在此之前,您最好的选择可能是在构造函数中进行。或者,您可以尝试使用JsonObject之类的东西,它允许您直接从 Map 初始化它(有关其工作原理的说明,请查看此博客文章)。