2011-10-10 8 views
12

J'ai parcouru le language documentation et il semble que le Google Dart ne supporte pas les mixins (pas de corps de méthode dans les interfaces, pas d'héritage multiple, pas de modules Ruby-like). Ai-je raison à ce sujet, ou y a-t-il une autre façon d'avoir une fonctionnalité de type mixin dans Dart?Est-ce que Google Dart prend en charge les mixins?

+0

vous pouvez mettre à jour la réponse correcte :) actuellement –

Répondre

9

Je suis heureux de signaler que la la réponse est maintenant Oui!

Un mixin est vraiment juste le delta entre une sous-classe et une superclasse. Vous pouvez ensuite "mélanger" ce delta à une autre classe.

Par exemple, considérons cette classe abstraite:

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

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

    Object toJson(); 
} 

Vous pouvez ensuite mélanger cela dans d'autres classes, évitant ainsi la pollution de l'arbre d'héritage.

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}; 
    } 
} 

Restrictions sur les définitions mixins comprennent:

  • Ne doit pas déclarer un constructeur
  • superclasse est un objet
  • Ne contient pas d'appels à super

Quelques lectures complémentaires:

Questions connexes