是否可以从动态变量实例化一个类?

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?

以上是关于是否可以从动态变量实例化一个类?的主要内容,如果未能解决你的问题,请参考以下文章

创建片段而不从 java 代码实例化它

类的用法

用java反射实例化私有内部类

java 动态片段实例化

C# 如何根据指定变量来实例化对象?

对象实例化过程