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() (A하는) 타입 B 난 그냥 다트 언어를 배우기 시작하고 나는이 문서에서이 경우에 대한 설명을 찾을 수 없습니다Dart : 다음 코드가 강력한 모드로 컴파일되는 이유는 무엇입니까?

Image showing the code compiled from https://dartpad.dartlang.org/

이 아닌. 왜 이런 일이 일어나는 지 아는 사람이 있습니까?

답변

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

그게 전부 야. _implicit downcast_입니다. [사용할 수 없도록 플래그를 추가하는] 문제가 있습니다 (http://dartbug.com/26583). –