Flutter学习7 - Dart 泛型

1、泛型类

dart 复制代码
//泛型类
class Cache<T> {
  final Map<String, T> _cache = {};

  void saveData(String key, T value) {
    _cache[key] = value;
  }

  //泛型方法
  T? getData(String key) {
    return _cache[key];
  }
}
dart 复制代码
void main() {
  Cache<int> cache1 = Cache();
  const String name1 = "Leon";
  cache1.saveData(name1, 18);
  print("name: $name1   age: ${cache1.getData(name1)}"); //name: leon   age: 18


  Cache<String> cache2 = Cache();
  const String name2 = "Alice";
  cache2.saveData(name2, "woman");
  print("name: $name2  sex: ${cache2.getData(name2)}"); //name: Alice  sex: woman
}

2、泛型约束

dart 复制代码
class Person {
  String? name;
  int? age;

  Person(this.name, this.age);

  void display() {
    print("name: $name   age: $age");
  }
}
dart 复制代码
class Student extends Person {
  String? _school;

  Student(name, age, this._school) : super(name, age);

  @override
  void display() {
    print("name: $name   age: $age  school: $_school");
  }
}
dart 复制代码
//泛型约束:T 只能是 Person 的子类
class Member<T extends Person> {
  T? _person;

  Member(this._person);

  void show() {
    if (_person != null) {
      _person!.display();
    }
  }
}
dart 复制代码
void main() {
  Member<Student> member = Member(Student("Leon", 18, "hafo"));
  member.show(); //name: Leon   age: 18  school: hafo
}

3、补充:Flutter 的一些编程技巧

(1)空安全

dart 复制代码
//安全调用
void safeUse() {
  List? list;
  print("list: ${list?.length}"); //list: null
}

(2)默认值

dart 复制代码
//默认值
void defaultUse() {
  bool? isOpen;
  //默认值
  String result = '';
  if (isOpen ?? false) {
    //isOpen == true
    result = '打开';
  } else {
    //isOpen == false || isOpen == null
    result = '关闭';
  }

  print("result: $result"); //关闭
}

(3)集合判空

dart 复制代码
//集合判空
void emptyUse() {
  List list = [];
  list.add(0);
  list.add('');
  list.add(null);
  list.add(true);

  for (int i = 0; i < list.length; i++) {
    if ([0, '', null].contains(list[i])) {
      print("index: $i   value: 空");
    } else {
      print("index: $i   vaule: ${list[i]}");
    }
  }
  // index: 0   value: 空
  // index: 1   value: 空
  // index: 2   value: 空
  // index: 3   vaule: true
}
相关推荐
LightspeedResearch20 分钟前
冲刺高分!挑战7天一篇GBD DAY1-7
学习
南宫生35 分钟前
力扣动态规划-19【算法学习day.113】
java·学习·算法·leetcode·动态规划
charlie1145141911 小时前
从0开始使用面对对象C语言搭建一个基于OLED的图形显示框架(绘图设备封装)
c语言·stm32·单片机·学习·oled·嵌入式软件
萝卜青今天也要开心2 小时前
读书笔记-《Redis设计与实现》(二)单机数据库实现(上)
java·数据库·redis·学习·缓存
Bluesonli3 小时前
UE5 蓝图学习计划 - Day 8:触发器与交互事件
学习·ue5·虚幻·虚幻引擎·unreal engine
学问小小谢4 小时前
第21节课:前端构建工具—自动化与模块化的利器
运维·前端·学习·计算机·自动化·电脑·硬件工程
遗憾皆是温柔4 小时前
JavaFX - 3D 形状
java·开发语言·ide·学习·3d
TangAcrab5 小时前
vscode flutter 项目连接 mumu 浏览器
ide·vscode·flutter
蝴蝶不愿意13 小时前
《苍穹外卖》项目学习记录-Day7添加购物车
学习
我的青春不太冷14 小时前
【实战篇章】深入探讨:服务器如何响应前端请求及后端如何查看前端提交的数据
运维·服务器·前端·学习