2013-09-24 56 views
1

我需要一个对象来创建其他对象的实例。我想创建的类的对象来传递的能力,但它们都需要有相同的类型,这将是巨大的,如果他们都具有相同的价值观开始了:那么飞镖中的动态实例化

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的子类型,对吧?

回答

0

为了让你开始,你可以创建一个小的“构造函数”函数返回新的实例。试试这个:

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定义返回基本类型的函数。

+0

很酷!我知道这些typedefs迟早会派上用场。谢谢! – pseudopeach

+0

可能还有其他方法可以做到这一点。希望这对你有用。 –