一、使用dart自带的泛型

集合等。

main(List<String> args) {
  var l = <String>[];
  l.add('aaa');
  l.add('bbb');
  l.add('ccc');
  print(l);

  var m = <int, String>{};
  m[1] = 'aaaa';
  m[2] = 'bbbb';
  m[3] = 'cccc';
  print(m);
}

[aaa, bbb, ccc]
{1: aaaa, 2: bbbb, 3: cccc}

容器对象,在创建对象时都可以定义泛型类型。

二、泛型函数

K addCache<K, V>(K key, V val) {
  print('$key -> $val');
  return val;
}

main(List<String> args) {
  var key = addCache('url', 'https://wiki.doucafecat.tech');
  print(key);
}

url -> https://wiki.doucafecat.tech
https://wiki.doucafecat.tech

三、泛型类

给泛型添加限制,不是任何类型都可以。

class Phone<T> {
  final T mobileNumber;
  Phone(this.mobileNumber);
}

main(List<String> args) {
  var p = Phone<String>('ducafecat');
  print(p.mobileNumber);
}

ducafecat

四、泛型限制

1.定义

class AndroidPhone  {
  void call(String num) {
    print('phone number is $num');
  }
 }

  class Phone<T extends AndroidPhone>{
    T phone;
    Phone(this.phone);
}

class IosPhone  {
  void call(String num) {
    print('phone number is $num');
  }
}

2.使用

void main(List<String> arguments) {
  AndroidPhone androidPhone = AndroidPhone();
  Phone<AndroidPhone> phone = Phone(androidPhone);
  phone.phone.call('123456');

  IosPhone iosPhone = IosPhone();
  //报错,不可用使用,因为IosPhone没有继承AndroidPhone 
  //Phone<IosPhone> phone2 = Phone(iosPhone);
  //phone2.phone.call('123456');
}

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐