2011-10-10 42 views
12

Tôi đã lướt qua số language documentation và có vẻ như Google Dart không hỗ trợ mixin (không có các đối tượng phương thức trong giao diện, không có nhiều thừa kế, không có mô-đun giống Ruby). Tôi có đúng về điều này không, hoặc có cách nào khác để có chức năng mixin giống như trong Dart không?Google Dart có hỗ trợ mixin không?

+0

bạn có thể muốn nâng cấp lên câu trả lời hiện đúng :) –

Trả lời

9

Tôi vui mừng thông báo rằng câu trả lời là có!

Một mixin thực sự chỉ là delta giữa một phân lớp và một lớp cha. Sau đó bạn có thể "trộn" đồng bằng đó với một lớp khác.

Ví dụ, hãy xem xét lớp trừu tượng này:

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

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

    Object toJson(); 
} 

Sau đó bạn có thể kết hợp này vào các lớp khác, như vậy tránh được tình trạng ô nhiễm của cây thừa kế.

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

Hạn chế về định nghĩa mixin bao gồm:

  • không Phải khai báo một constructor
  • lớp cha là Object
  • Không chứa các cuộc gọi đến siêu

Một số đọc thêm:

Các vấn đề liên quan