如何有条件地投掷飞镖?

时间:2019-05-28 01:41:14

标签: dart casting

似乎只是一个变量,我可以有条件地进行这样的投射。

Animal animal = Dog();
if (animal is Dog) {
  animal.bark(); // animal is of type Dog here
}

但是,如果它是类的属性,该如何有条件地强制转换?

House house = House()
house.animal = Dog();
if (house.animal is Dog) {
  house.animal.bark(); // fail
}

我知道我可以这样做

if (house.animal is Dog) {
  Dog animal = house.animal;
  animal.bark();
}

但这似乎很麻烦。无论如何,我可以像使用变量一样一口气检查并强制转换类型吗?

非常感谢。

2 个答案:

答案 0 :(得分:2)

这似乎是Dart的局限性。

如果有很多条件,则在每个Animal块中实例化if子类可能很麻烦。

我会这样做,

House house = House();
Animal animal = house.animal = Dog();

if (animal is Dog) {
  animal.bark();
} else if (animal is Cat) {
  animal.meow();
} else if (animal is Wolf) {
  animal.howl();
}

答案 1 :(得分:0)

您可以像下面的示例一样管理条件类型转换:

class MyException implements Exception {
  int customCode = 2;
}

void myFunc(){
  //you can switch between the values below to see the effect
  // throw Exception();
  throw MyException();
}

void main() {
  try {
    myFunc();
  } catch (e) {
    final i = e is MyException ? e.customCode : -10;
    print(i);
  }
}