2016-10-31 3 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]) 

しかし、次のように動作します。静的なmakeメソッドを作成するには、余分な作業が必要です。

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

実際にはありません。

コンストラクタを関数に変換する構文がありますが、まだどこにでも実装されておらず、今後変更される可能性があるため、使用することはお勧めしません。それは、多かれ少なかれ読みだ好みの問題であるかどうか dart Map<int, Function> funcMap = {0: (v) => new A(v), 25: (v) => new Z(v)};

makeまたはcreate機能を有することに代わりはマップ内のその関数をインラインで記述することです。

+0

ありがとうございます。コンストラクタを関数に変換するための構文は何ですか?私は新しいFoo(x、y)よりもむしろFoo(x、y)をやる方がよいでしょう。 – jfp

関連する問題