1da*_*ake 10 dart dart-mirrors
在dart中是否可以从字符串中实例化一个类?
例如:
var myObject = window[classNameString];
Run Code Online (Sandbox Code Playgroud)
id myclass = [[NSClassFromString(@"MyClass") alloc] init];
Run Code Online (Sandbox Code Playgroud)
小智 5
尝试:
Map models = {"Player": Player.instantiate};
var player = models["Player"]();
class Player{
static instantiate() => Player();
}
Run Code Online (Sandbox Code Playgroud)
您需要知道库名称和类名称才能正常工作。假设您都知道,下面的示例将实例化TestClass并调用doStuff它。
library test;
import "dart:mirrors";
class TestClass {
doStuff() => print("doStuff was called!");
}
main() {
MirrorSystem mirrors = currentMirrorSystem();
LibraryMirror lm = mirrors.libraries['test'];
ClassMirror cm = lm.classes['TestClass'];
Future tcFuture = cm.newInstance('', []);
tcFuture.then((InstanceMirror im) {
var tc = im.reflectee;
tc.doStuff();
});
}
Run Code Online (Sandbox Code Playgroud)
关于此解决方案的一些注意事项:
test尝试从中加载类的库已经导入到虚拟机中,这使得这种情况变得更容易一些。newInstance允许将参数传递给构造函数。位置参数已实现,但命名参数尚未实现(截至 M2 版本)。newInstance返回一个Future以允许它跨隔离工作。| 归档时间: |
|
| 查看次数: |
2615 次 |
| 最近记录: |