是否可以从动态变量实例化一个类?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否可以从动态变量实例化一个类?相关的知识,希望对你有一定的参考价值。
我有许多基本类型相同的对象。我想建立一个通用的函数来创建它们。代码示例:
class Grid extends Display { ....
class Start extends Display { ....
class MainClass {
Grid grid;
Start start;
....
}
在MainClass方法中,代替此:
start = new Start();
start.load(PATH);
grid = new Grid();
grid.load(PATH);
....
我想做这样的事情:
void _newDisplay(dynamicType, Display display) {
display = new dynamicType();
display.load(PATH);
}
_newDisplay(Start, start);
_newDisplay(Grid, grid);
....
我读了http://www.dartlang.org/articles/optional-types/,但没有完全找到我想要的。
我也发现了Instantiate a class from a string,但有一条评论说:“注意:当编译为javascript时,这可能不起作用。dart2js编译器尚未完全支持镜像。”这种“镜像”解决方案是唯一可用于动态实例化的解决方案吗?
答案
Dart不支持直接执行此操作的方法。通常,我们通过提供一个为我们实例化类型的闭包来解决此问题:
void _newDisplay(dynamicType, Display display) {
display = dynamicType();
display.load(PATH);
}
_newDisplay(() => Start(), start);
_newDisplay(() => Grid(), grid);
另请参阅What are some good workarounds for dart's lack of static typing semantics?
以上是关于是否可以从动态变量实例化一个类?的主要内容,如果未能解决你的问题,请参考以下文章