dart类型转换 is as

更新时间:2023-05-25 21:55

参考java的向上转型和向下转型:https://www.wodecun.com/blog/8131.html
is 、as 属于Type test operators。

is 判断是否是某个类型,返回true或者false。
如果a 是b的实现类,那么a is b 就返回true。

as 是类型转换,其相当于 :先检测 其是不是,然后再调用的一种简写。
但是还不是完全一致,当不是的时候,as 会抛出exception。

if (emp is Person) {
  // Type check
  emp.firstName = 'Bob';
}

可以简写为:

(emp as persion).firstName='Bob';

如果emp 不是persion,name就会抛出exception。

举例说明:

 

void main(List<String> arguments) {
  //向上转型
  Test test2 = Test2();
//判断test2是否Test2类的实现
  print(test2 is Test2);

  //向下转型 (as强制类型转换)
  //方法1:
  if(test2 is Test2)
  {
    test2.cs(); //在这个if体中idea可以提示 cs() 外部不提示
  }
  //方法2
  // (test2 as Test2).cs();
  //或者拆分:
  Test2 test = test2 as Test2;
  test.cs();
  
  print(test.runtimeType); //输出:Test2

}
class Test {}
class Test2 extends Test {
  cs() {
    print('test2-cs');
  }
}