class A {
int b;
int c;
A(this.b, this.c);
}
void testFunc(Object param) {
print((param as A).b);
print(param.c); //is there documentation somewhere? Why is there no need type casting?
}
为什么第二次就不需要类型转换了?
Dart 分析器逻辑上决定这个对象是什么类型,一般这个转换表达式有 2 种可能的情况:
(param as A)
param
是A类或其子类型的实例。在这种情况下,该代码块中的所有代码都将处理
作为param
的实例,就像您只是检查类型一样:A
if(param is A){ // this scope (if body) will treat param as an instance of A }
TypeError
TypeError 会导致程序崩溃,如您所知(错误不应该被捕获,因为它们代表意外的程序流程)。
因此,您将收到一个错误,表明
param
不是 A
类型,假设您捕获了该错误:param.c
的下一个表达式将导致错误,表明 param
没有 getter称为 c
。
毕竟,成功的选角场景最有可能回答你的问题。