在Dart中将类类型作为变量传递

19

在Dart中是否可以将一个类类型作为变量传递?

我正在尝试做如下操作:

class Dodo
{
  void hello() {
    print("hello dodo");
  }
}

void main() {

var a = Dodo;
var b = new a();
b.hello();

}

在Python中类似的代码可以正常工作。在Dart中,我会在new a()处报错,提示a不是一个类型。

是否可以使用类对象作为变量? 如果不能,有什么推荐的解决方法吗?

3个回答

27

通过传递一个闭包而不是类的方式,还有另一种方法可以实现。这样,您就可以避免使用镜像。例如:

a = () => new Dodo();
...
var dodo = a();

3
请注意,虽然这种解决方案非常有用,但如果您需要传递很多参数,则可能不够优雅。 - Smily
为什么不呢?你可以这样做:a = (String myString) => new Dodo(myString); var dodo = a("hello"); - Ian Spryn

7
您可以使用镜像API:
import 'dart:mirrors';

class Dodo {
  void hello() {
    print("hello dodo");
  }
}

void main() {
  var dodo = reflectClass(Dodo);

  var b = dodo.newInstance(new Symbol(''), []).reflectee;
  b.hello();
}

也许可以更紧凑地编写代码,特别是 new Symbol('') 表达式。

1
我正在尝试使用文本作为类名,但我认为这不应该起作用,我该怎么做? - Frank Leal

-3

你可以做的是:

const dynamic a = Dodo; // or dynamic a = Dodo;
var b = new a();
b.hello();

这对我来说很好用;享受吧!


那个不起作用。 - Fredrik_Borgstrom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接