2016-06-16 5 views
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のものではない新しい私はちょうどダーツ言語を学び始め、私はドキュメントで、この場合の説明を見つけることができませんでした。誰がなぜこれが起こっているのか知っていますか?

答えて

1

Cコンストラクタに入力ミスがありました。

class C { 
    B b; 
    C(B/*not A*/ bb){ this.b = bb; } 
} 
+0

いや、実際にはエラーメッセージがこの行にする必要があります:あなたが意味するか 'this.b = BB;' BのタイプがBとBBですので、私は私がここで答えを見つけたと思うA.次のとおりです。 。 _ダウンアサインメントは有効かもしれませんし、Dartはあなたがしていることを知っていると楽観的です。私たちは静的検査にも合格させます._私が行っていることは、ダウン割り当てです。 [https://www.dartlang.org/articles/why-dart-types/](https://www.dartlang.org/articles/why-dart-types/)クイック返信ありがとう! –

+0

それだけです。 _暗黙のダウンキャスト_です。 [無効にするフラグを追加する]という問題があります(http://dartbug.com/26583) –

関連する問題