Dart中的mixins和泛型

Dart学习(六)

mixins

mixins可以实现类似多继承的功能。

mixins的特点:

  1. 作为mixins的类只能继承自Object,不能继承其他类;
  2. 作为mixins的类不能有构造函数;
  3. 一个类可以mixins多个mixins类,如果当前类extends的类和mixins的多个类中有同名方法,这个类创建的实例调用mixins中有这个方法的最后一个类;
  4. mixins不是继承,也不是接口,而是一种新特性;
// 定义一个Mixin类A
mixin A {
  void hello() {
    print('Hello from A');
  }
}

// 定义一个Mixin类B
mixin B {
  void hello() {
    print('Hello from B');
  }
}

// 定义一个父类Base
class Base {
  void hello() {
    print('Hello from Base');
  }
}

// 定义一个继承Base类和混入A和B类的子类C
class C extends Base with A, B {}

void main() {
  var c = C();
  c.hello(); // 输出: Hello from B
}

注:mixins的类型是其超类的子类型,上述例子中的实例c is A或者is B都为true。

泛型

Dart中的泛型与ts类似,用于解决类,接口,方法的复用性,对不确定类型的支持(类型校验)。

// 使用泛型的类
class Box<T> {
  T _value;

  void add(T value) {
    _value = value;
  }

  T get() {
    return _value;
  }
}

void main() {
  Box<String> stringBox = Box<String>();
  stringBox.add('Hello');
  print(stringBox.get());

  Box<int> intBox = Box<int>();
  intBox.add(123);
  print(intBox.get());
}


// 使用泛型的接口
abstract class Repository<T> {
  Future<T> getById(int id);
  Future<List<T>> getAll();
  Future<T> add(T item);
  Future<void> update(T item);
  Future<void> delete(int id);
}

class UserRepository implements Repository<User> {
  
  Future<User> getById(int id) {
    //实现代码
  }

  
  Future<List<User>> getAll() {
    //实现代码
  }

  
  Future<User> add(User item) {
    //实现代码
  }

  
  Future<void> update(User item) {
    //实现代码
  }

  
  Future<void> delete(int id) {
    //实现代码
  }
}

class User {
  int id;
  String name;
  String email;

  User({this.id, this.name, this.email});
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值