私は、Dartのいくつかのオブジェクトの実行時の型をチェックしようとしているいくつかの奇妙な振る舞いを見つけました。 簡単な例を作ってみましょう:switch文のダートランタイムタイプのチェック
main(List<String> args) {
List<Map> l1 = new List<Map>();
l1.add(new Map<String, int>());
List<int> l2 = ['Start', 'Stop'];
checkType(l1.runtimeType);
checkType(l1[0].runtimeType);
checkType(l2.runtimeType);
}
checkType(Type type) {
switch(type) {
case List:
print('it is a List!');
break;
case Map:
print('it is a List!');
break;
default:
print('Unmanaged type $type');
break;
}
}
このプログラムは、以下の出力があります。
アンマネージドタイプList<Map>
アンマネージドタイプ_InternalLinkedHashMap<String, int>
List
最初のケースは、switch文で確認することができないアンマネージドタイプ私が "List<Map>
"の場合を設定しようとするとエラーが出るので、定数式では、この演算子のオペランドは 'num'タイプでなければならない ケースで_InternalLinkedHashMapを使用すると、次のエラーが発生するため、秒を一致させることはできません。ケース式は定数でなければなりません。
最後に、リストをintのリスト(List<int>
)として定義しましたが、システムはそれを無視して単純なリストと見なします。 これは誤解を招くものであり、そのような宣言は禁じられるべきだと思います。
助け/提案?
私はあなたがこれで強いモードから多くの助けを得ると思います。それはあなたにいくつかの警告/エラーを与えるだろう。 – Pacane
型チェックのために 'is'を使います。 'if(type is List){...} else if(型がMap){...} else {...}'。 'switch'文はここでは機能しません。一般的なパラメータはチェックされません – Ganymede