2011-10-10 9 views
12

Ho sfogliato lo language documentation e sembra che Google Dart non supporti i mixins (nessun corpo del metodo nelle interfacce, nessuna ereditarietà multipla, nessun modulo simile a Ruby). Ho ragione su questo, o c'è un altro modo per avere funzionalità di tipo mixin in Dart?Google Dart supporta i mixaggi?

+0

si potrebbe desiderare di aggiornare la risposta corretta al momento :) –

risposta

9

Sono felice di riferire che la la risposta è ora Sì!

Un mixin è in realtà solo il delta tra una sottoclasse e una superclasse. È quindi possibile "mescolare" quel delta a un'altra classe.

Ad esempio, si consideri questa classe astratta:

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

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

    Object toJson(); 
} 

È quindi possibile mescolare questo in altre classi, evitando così l'inquinamento del albero di ereditarietà.

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

Restrizioni definizioni mixin includono:

  • Non deve dichiarare un costruttore
  • superclasse è Object
  • Non contiene chiamate a Super

qualche lettura supplementare: