我是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 {}
,使TypeClassB
和TypeClassC
都实现TypeClassAWithMixInA
。
如果你不是TypeClassB
或TypeClassC
的作者,这也行不通。
此时,在静态类型系统中,您无法仅请求实现两个独立接口的类的实例。Dart类型系统没有交叉类型,而这就是交叉类型。
您必须接受其中一种类型,然后动态检查它是否也实现了另一种类型,如果没有,则在运行时抛出。