Google Dart是否支持mixins?

psy*_*yho 12 mixins dart

我已经浏览了语言文档,似乎Google Dart不支持mixins(接口中没有方法体,没有多重继承,没有类似Ruby的模块).我对此是正确的,还是有其他方法可以在Dart中使用类似mixin的功能?

Set*_*add 9

我很高兴地报告答案现在是的!

mixin实际上只是子类和超类之间的增量.然后,您可以将该delta与另一个类"混合".

例如,考虑这个抽象类:

 abstract class Persistence {  
  void save(String filename) {  
   print('saving the object as ${toJson()}');  
  }  

  void load(String filename) {  
   print('loading from $filename');  
  }  

  Object toJson();  
 } 
Run Code Online (Sandbox Code Playgroud)

然后,您可以将其混合到其他类中,从而避免继承树的污染.

 abstract class Warrior extends Object with Persistence {  
  fight(Warrior other) {  
   // ...  
  }  
 }  

 class Ninja extends Warrior {  
  Map toJson() {  
   return {'throwing_stars': true};  
  }  
 }  

 class Zombie extends Warrior {  
  Map toJson() {  
   return {'eats_brains': true};  
  }  
 } 
Run Code Online (Sandbox Code Playgroud)

mixin定义的限制包括:

  • 不得声明构造函数
  • 超类是对象
  • 不包含超级电话

一些额外的阅读: