5

我有许多相同基本类型的对象。我想构建一个通用函数来创建它们。代码示例:

class Grid extends Display { ....
class Start extends Display { ....

class MainClass {
  Grid grid;
  Start start;
  ....
}

在 MainClass 方法中,而不是 this :

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 编译器尚不完全支持镜像。”。这个“镜像”解决方案是唯一可用于进行动态实例化的解决方案吗?

4

1 回答 1

6

Dart 不支持直接执行此操作。通常我们通过提供一个为我们实例化类型的闭包来解决这个问题:

void _newDisplay(dynamicType, Display display) {
  display = dynamicType();
  display.load(PATH);        
}

_newDisplay(() => Start(), start);
_newDisplay(() => Grid(), grid);

Also see What are some good workarounds for dart's lack of static typing semantics?

于 2013-05-10T19:51:14.930 回答