Dart中的动态类方法调用

Dynamic class method invocation in Dart

像PHP中动态类方法调用的问题一样,我希望在DART中这样做。

1
2
3
var ="name";
page.${var} = value;
page.save();

有可能吗?


有几件事你可以实现与镜子。

下面是一个如何设置类值以及如何动态调用方法的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import 'dart:mirrors';

class Page {
  var name;

  method() {
    print('called!');
  }
}

void main() {
  var page = new Page();

  var im = reflect(page);

  // Set values.
  im.setField("name","some value").then((temp) => print(page.name));

  // Call methods.
  im.invoke("method", []);
}

如果你想知道,imInstanceMirror,它基本上反映了page的情况。

还有一个问题:有没有一种方法可以动态调用一个方法或在DART中的类中设置一个实例变量?


您可以使用DART镜像API来执行这类操作。镜像API现在还没有完全实现,但其工作原理如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import 'dart:mirrors';

class Page {
  String name;
}

main() {
  final page = new Page();
  var value ="value";

  InstanceMirror im = reflect(page);
  im.setField("name", value).then((_){
    print(page.name); // display"value"
  });
}


可以使用序列化

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import 'package:serializable/serializable.dart';

@serializable
class Page extends _$PageSerializable {
  String name;
}

main() {
  final page = new Page();
  var attribute ="name";
  var value ="value";

  page["name"] = value;
  page[attribute] = value;

  print("page.name: ${page['name']}");
}