我想打开动物并采取适当的动作。
switch (animal.runtimeType) {
case Cat:
animal.pet();
break;
case Crocodile:
animal.runAway();
break;
default:
print('Not a known animal.');
}
如果我要链接这将起作用,因为范围将知道if (animal is Cat){}
块中的animal
的类型。
由于某种原因,开关语句并非如此。在这种情况下,我将获得错误
The method pet() isn't defined for the class animal
如何在案例块中使用案例断言?我不能使用as
,因为我的CI棉布不允许它(这是一件好事(,并且在情况内使用IF操作是没有意义的,因为使用IF-ELSE语句的代码较小,并且提供了更多的可用性。
我不确定我是否不理解您的问题或您不了解问题。
假设您在Cat
内定义了pet()
,而不是在Animal
中定义了错误,则错误The method pet() isn't defined for the class animal
发生了,因为Animal
是通用的。Animal
不一定是Cat
,因此您无法调用Animal
的方法pet()
,因为它仅在Cat
内定义。
如果animal
是局部变量,则在箱体块中施放完全安全。您可以可靠地进行(animal as Cat).pet();
,一旦您检查了animal
确实是Cat
。