mixin的超类不是Object

时间:2015-01-14 17:04:32

标签: dart

我想做类似以下的事情

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

2 个答案:

答案 0 :(得分:3)

您可以使用mixin作为一些限制(请参阅Mixins in Dart - Syntax and semantics)。

  

但是,在此提案中,mixin只能从遵守以下限制的类中提取:

     
      
  1. 该类没有声明的构造函数。
  2.   
  3. 类'超类是Object。
  4.   
  5. 该课程不包含超级电话。
  6.   

将来可能会删除这些限制。

  

语义被故意限制在几个方面,以减少对现有实现的干扰,同时允许未来向完全混合实现的演进。这种受限制的版本已经提供了相当大的价值。

答案 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{}

当然,如果DynamicValidationErrors无法以这种方式隔离,并且依赖于继承自Observable,则无法做到这一点。