似乎只是一个变量,我可以有条件地进行这样的投射。
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();
}
但这似乎很麻烦。无论如何,我可以像使用变量一样一口气检查并强制转换类型吗?
非常感谢。
答案 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);
}
}