2011-10-10 12 views
12

Przeszedłem przez language documentation i wydaje się, że Google Dart nie obsługuje mixin (bez ciał metod w interfejsach, bez dziedziczenia wielokrotnego, bez modułów typu Ruby). Czy mam rację co do tego, czy istnieje inny sposób na funkcjonalność podobną do mixina w Dart?Czy Google Dart obsługuje miksowanie?

+0

może chcesz zaktualizować do aktualnie poprawną odpowiedź :) –

Odpowiedz

9

Cieszę się zgłosić, że odpowiedź brzmi: tak!

Mieszanka jest tak naprawdę tylko różnicą pomiędzy podklasą i nadklasą. Następnie możesz "miksować" tę deltę z inną klasą.

Na przykład, rozważmy tę abstrakcyjną klasę:

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

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

    Object toJson(); 
} 

Następnie można mieszać to do innych klas, unikając w ten sposób zanieczyszczenia drzewa dziedziczenia.

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

Ograniczenia dotyczące definicji wstawianej obejmują:

  • nie musi zadeklarować konstruktor
  • Nadklasa jest Object
  • Zawiera żadnych połączeń Super

kilka dodatkowych czytania