0
void main(){
new C(new A()); // This gives no warning or error
new D(new A()); // This gives an error
}
class A{}
class B extends A{}
class C {
B b;
C(A bb){ this.b = bb; }
}
class D {
B b;
D(this.b);
}
、しかし、唯一の第二は、エラーを与える:タイプチェックを失敗しました:A()(A)はDart:次のコードは強モードでコンパイルされるのはなぜですか?私は両方のステートメントが強いモードでエラーまたは警告を与える必要があります間違っていないよ場合は、私は、パラメータとしてタイプAのインスタンスを与える主な機能の両方の文で
Image showing the code compiled from https://dartpad.dartlang.org/
タイプBのものではない新しい私はちょうどダーツ言語を学び始め、私はドキュメントで、この場合の説明を見つけることができませんでした。誰がなぜこれが起こっているのか知っていますか?
いや、実際にはエラーメッセージがこの行にする必要があります:あなたが意味するか 'this.b = BB;' BのタイプがBとBBですので、私は私がここで答えを見つけたと思うA.次のとおりです。 。 _ダウンアサインメントは有効かもしれませんし、Dartはあなたがしていることを知っていると楽観的です。私たちは静的検査にも合格させます._私が行っていることは、ダウン割り当てです。 [https://www.dartlang.org/articles/why-dart-types/](https://www.dartlang.org/articles/why-dart-types/)クイック返信ありがとう! –
それだけです。 _暗黙のダウンキャスト_です。 [無効にするフラグを追加する]という問題があります(http://dartbug.com/26583) –