我想做类似以下的事情
abstract class A{}
abstract class B extends A{}
abstract class C extends A{}
abstract class D extends B with C{} //C cannot be used as a mixin because it extends a class other than object
除了在D?中复制C的内容之外还有其他解决方案吗?
我班级的真实姓名,让你知道我想要做什么
//A Observable
//B DynamicObservable
//C ObservableWithValidationErrors
//D DynamicObservableWithValidationErrors
答案 0 :(得分:3)
您可以使用mixin作为一些限制(请参阅Mixins in Dart - Syntax and semantics)。
但是,在此提案中,mixin只能从遵守以下限制的类中提取:
- 该类没有声明的构造函数。
- 类'超类是Object。
- 该课程不包含超级电话。
醇>
将来可能会删除这些限制。
语义被故意限制在几个方面,以减少对现有实现的干扰,同时允许未来向完全混合实现的演进。这种受限制的版本已经提供了相当大的价值。
答案 1 :(得分:2)
在某些情况下,可能会重新构建您的类以使用多个mixin:
abstract class Observable{}
abstract class Dynamic{}
abstract class ValidationErrors{}
abstract class DynamicObservable extends Observable with Dynamic{}
abstract class ObservableWithValidationErrors extends Observable with ValidationErrors{}
abstract class DynamicObservableWithValidationErrors extends Observable with Dynamic, ValidationErrors{}
当然,如果Dynamic
或ValidationErrors
无法以这种方式隔离,并且依赖于继承自Observable
,则无法做到这一点。