Dart中的动态实例化

时间:2013-09-24 21:32:35

标签: reflection dart factory dart-mirrors

我需要一个生成其他对象实例的对象。我希望能够传入正在创建的对象的类,但是它们都需要具有相同的类型,如果它们都可以以相同的值开始,那就太棒了:

class Cloner{

  BaseType prototype;

  BaseType getAnother(){
    BaseType newthing = prototype.clone(); //but there's no clone() in Dart
    newthing.callsomeBaseTypeMethod();
    return newthing;
  }
}

因此,原型可以设置为任何BaseClass类型的对象,即使它的类是BaseClass的子类。我确定有一种方法可以使用镜像库来实现这一点,但我只是想确保我没有错过一些明显的内置工厂方法。

我可以看到如何使用泛型Cloner<T>来设置它,但是我们无法在编译时确保T是BaseType的子类型,对吧? / p>

1 个答案:

答案 0 :(得分:1)

为了帮助您入门,您可以创建一个小型的#34;构造函数&#34;返回新实例的函数。试试这个:

typedef BaseType Builder();

class Cloner {
  Builder builder;

  Cloner(Builder builder);

  BaseType getAnother() {
    BaseType newthing = builder();
    newthing.callsomeBaseTypeMethod();
    return newthing;
  }
}

main() {
  var cloner = new Cloner(() => new BaseType());
  var thing = cloner.getAnother();
}

在上面的代码中,我们创建了一个typedef来定义一个返回BaseType的函数。