在Dart中是否有可能同时接受满足这两种类型的参数?



我是Dart新手,我希望只接收继承特定接口的小部件。在其他语言中,满足两个接口的类可以传递给函数。但是在Dart中,即使我搜索,我也找不到类似的函数或Generic,所以我在问一个问题。

class TypeClassA {

}
mixin TypeMixInA {

}
class TypeClassB extends TypeClassA with TypeMixInA {

}
class TypeClassC extends TypeClassA with TypeMixInA {

}

void functionA(TypeClassA & TypeMixInA param) { // TypeClassA & TypeMixInA is possible?

}
void main() {
functionA(TypeClassB());
functionA(TypeClassC());
}

是否有一种方法来接收两个接口(两个mixins或两个类,等)在上面的例子functionA ?

不,不可能。

如果TypeMixInA只混合在TypeClassA之上,那么您可以在TypeMixInA上添加implements TypeClassA,并仅使用TypeMixInA作为参数类型。

如果两者单独使用,那就行不通了。

然后引入abstract class TypeClassAWithMixInA implements TypeMixInA, TypeClassA {},使TypeClassBTypeClassC都实现TypeClassAWithMixInA

如果你不是TypeClassBTypeClassC的作者,这也行不通。

此时,在静态类型系统中,您无法仅请求实现两个独立接口的类的实例。Dart类型系统没有交叉类型,而这就是交叉类型。

您必须接受其中一种类型,然后动态检查它是否也实现了另一种类型,如果没有,则在运行时抛出。

最新更新