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

class Cloner{

  BaseType prototype;

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

因此,原型(prototype)可以设置为任何类型为BaseClass的对象,即使该对象的类是BaseClass的子类也是如此。我确定可以使用mirrors库执行此操作,但是我只是想确保自己没有遗漏一些明显的内置工厂方法来执行此操作。

我可以看到如何使用泛型Cloner<T>进行设置,但是没有办法确保在编译时T是BaseType的子类型,对吗?

最佳答案

首先,您可以创建一个小的“构造函数”函数以返回新实例。试试这个:

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的函数。

10-08 03:28