2013-09-24 5 views
1

Мне нужен объект, который делает экземпляры других объектов. Я хочу, способность проходить в классе объектов создается, но все они должны иметь тот же тип, и было бы здорово, если бы они все могли бы начать с теми же значениями:Dynamic Instantiate in Dart

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 для определения функции, возвращающей BaseType.

+0

О, круто! Я знал, что эти типефы пригодится рано или поздно. Благодаря! – pseudopeach

+0

Возможно, есть другие способы сделать это. Надеюсь, что это работает для вас. –