# 13.泛型

# 泛型方法

/**
 * 通俗理解: 泛型就是 解决 类 接口 方法的复用性, 以及对不特定数据类型的支持(类型校验)
 */

// 只能返回string类型的数据
String getData(String value) {
  return value;
}

// 同时支持返回 string类型 和 int类型   不指定类型可以解决这个问题
getDatas(value) {
  return value;
}

// 不指定类型放弃了类型检查, 我们现在想实现的是传入什么, 返回什么. 
// 比如: 传入number类型 必须返回 number类型
// 第一个 T 表示返回的类型  (可以用任意字母代替) 
// 第二个 T 表示调用方法指定类型
// 第三个 T 表示传入的value是泛型
T getinfo<T>(T value) {
  return value;
}

void main() {
  print(getinfo(123));
  print(getinfo<String>('星城'));
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

# 泛型类

// 集合List 泛型类的用法

// 案例: 把下面类转换成泛型类, 要求List里面可以增加int类型的数据
//        也可以增加String类型的数据

class PrintClass {
  List list = new List<int>();
  void add(int value) {
    this.list.add(value);
  }
  void printInfo() {
    for(var i=0;i<this.list.length;i++) {
      print(this.list[i]);
    }
  }
}

// 将上面的类转换为泛型类, 我们需要传入什么, 就返回什么 
class PrintClass2<T> {
  List list = new List<T>();
  void add(T value) {
    this.list.add(value);
  }
  void printInfo() {
    for(var i=0;i<this.list.length;i++) {
      print(this.list[i]);
    }
  }
}

main() {
  PrintClass2 p = new PrintClass2<String>();
  p.add('星城');
  p.add('哈哈');
  p.printInfo();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

# 泛型接口

/**
 * 通俗理解: 泛型就是 解决 类 接口 方法的复用性, 以及对不特定数据类型的支持(类型校验)
 */

// 只能返回string类型的数据
String getData(String value) {
  return value;
}

// 同时支持返回 string类型 和 int类型   不指定类型可以解决这个问题
getDatas(value) {
  return value;
}

// 不指定类型放弃了类型检查, 我们现在想实现的是传入什么, 返回什么. 
// 比如: 传入number类型 必须返回 number类型
// 第一个 T 表示返回的类型  (可以用任意字母代替) 
// 第二个 T 表示调用方法指定类型
// 第三个 T 表示传入的value是泛型
T getinfo<T>(T value) {
  return value;
}

void main() {
  print(getinfo(123));
  print(getinfo<String>('星城'));
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
上次更新: 2021/2/21 下午7:52:17