有此类类型转换的文档吗?

问题描述 投票:0回答:1
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?
}

为什么第二次就不需要类型转换了?

flutter dart casting typecasting-operator
1个回答
0
投票

Dart 很聪明

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

毕竟,成功的选角场景最有可能回答你的问题。

© www.soinside.com 2019 - 2024. All rights reserved.