2016-10-31 49 views
2

的調度表:如何創建如果我定義了一堆類創建不同類型的對象

class A { 
    final List<int> value; 
    A(this.value); 
    static make(List<int> value) => new A(value); 
} 
// more class defs here 
class Z { 
    final List<String> value; 
    Z(this.value); 
    static make(List<String> value) => new A(value); 
} 

然後下面是不行的,因爲類型沒有任何方法

Map<int, Type> typeMap = {0: A, 25: Z}; 
new typeMap[0]([1, 2, 3]) 

但下面的工作。雖然,創建靜態生成方法需要大量額外的工作。

Map<int, Function> funcMap = {0: A.make, 25: Z.make}; 
funcMap[0]([1, 2, 3]) 

有沒有更好的方法來做到這一點?

+0

https://pub.dartlang.org/packages/source_gen,https://pub.dartlang.org/packages/reflectable或者'dart:mirrors'如果它不適合瀏覽器(帶鏡子的dart2js會導致代碼膨脹爲生成的JS輸出文件)。 –

回答

1

不是,沒有。

有一種將構造函數轉換爲函數的語法,但它到處都沒有實現,並且將來可能會更改,因此我不建議使用它。

具有makecreate功能另一種方法是寫在映射函數內聯: dart Map<int, Function> funcMap = {0: (v) => new A(v), 25: (v) => new Z(v)}; 這是否是或多或少可讀是口味的問題。

+0

謝謝。將構造函數轉換爲函數的語法是什麼?我寧願做Foo(x,y)而不是新的Foo(x,y)。 – jfp

相關問題