行业知识
Dart语法下
2026-10-20 15:40:52
来源:互联网转载
十三、Dart中的范型
13.1 范型方法
通俗���解: 范型就是解决类、接口、方法的复用性,以及对不特定数据类型的支持(类型校验)
()案例1:
- 定义一个函数只能返回String类型的数据
String getStringData(String value){ return value;}案例2:
()- 同时支持返回String和int类型
String getStrData(String value){ return value;}int getIntData(int value){ return value;}案例3: 同时返回String类型和number类型,不指定类型可以解决这个问题
getMixData(value){ return value;}案例4:
- 不指定类型放弃了类型检查.我们现在想实现的是传入什么,返回什么.
- 比如传入number,类型必须返回number类型,传入String类型必须返回String类型.要求类型一致.
- 因此引入范型
- 用T对返回值类型进行校验
- 对返回值类型不进行校验
//T校验返回值 T getMixDatas(T value){ return value; } //不校验返回值 getMixDatal(T value){ return value; }-
- 案例调用
main(){ print(getMixDatas(2222)); print(getMixDatas("11111"));}-
- 但是这么操作还是没有实现类型一致性,既然引入了范型,那么我们在调用的时候添加上约束就行
print(getMixDatas("3333"));print(getMixDatas(4444));13.2 范型在类中的用法.
- 集合List在范型类的用法
案例:
把下面类转换成范型类,要求MyList里面可以增加int类型的数据,也可以增加String类型的数据.但是每次调用增加的类型要统一.
class MyList{ List list = []; void add(int value){ this.list.add(value); } List getList(){ return list; }}main(){ MyList l = new MyList(); l.add(1); l.add(12); l.add(5); print(l.getList());//[1,12,5]}-
- 修改后的实现部分
class MyList{ List list = []; void add(T value){ this.list.add(value); } List getList(){ return list; }}-
- 案例调用
List list1 = new List.filled(2,0);//初始化list1列表,长度为2,填充值为0,也就是[0,0]list1[0] = 11111;list1[1] = 22222;print(list1);//[11111, 22222]
13.3 范型接口
案例1:
-
- 两个抽象类ObjectCache、StringCache
- 对两个抽象类进行复用性精简.
abstract class ObjectCache { getByKey(String key); void setByKey(String key,Object value);}abstract class StringCache{ getByKey(String key); void setByKey(String key,String value);}//将上述两个抽象类进行复用性精简abstract class Cache { getByKey(String key); void setByKey(String key,T value);}案例2:
实现数据缓存的功能: 有文件缓存和内存缓存.内存缓存和文件缓存按照接口约束实现.
-
- 1、定义一个范型接口,约束实现它的子类必须有getByKey(key)和setByKey(key,value)
- 2、要求setByKey的时候的value类型和实例化子类的时候指定的类型一致.
根据要求,首先需要定义两种类型的缓存,通过对缓存抽象类的实现,定制两种类型的类.
abstract class Cache{ getByKey(String key); void setByKey(String key,T value);}class FileCache implements Cache{ @override getByKey(String key){ return null; } @override void setByKey(String key,T value){ print("我是文件缓存 把key=${key} value=${value}的数据写入到了文件中"); }}class MemoryCache implements Cache{ @override getByKey(String key){ return null; } @override void setByKey(String key,T value){ print("我是内存缓存 把key=${key} value=${value} - 写入到了内存中"); }}- 根据编写的类,对其进行调用测试
void main(){ MemoryCache m = new MemoryCache(); m.setByKey('index','首页数据');//我是内存缓存 把key=index value=首页数据 -写入到了内存中 MemoryCache n = new MemoryCache(); n.setByKey('index',{"name": "张三", "age": 20});//我是内存缓存 把key=index value={name: 张三, age: 20} -写入到了内存中}13.4 总结
- 范型就是解决类、接口、方法的复用性,以及对不特定数据类型的支持(类型校验)
十四、Dart中的库
14.1 Dart中的库
前面介绍Dart基础知识的时候基本上都是在一个文件里面编写Dart代码,但实际开发中不可能这么写,模块化很重要,所以这就需要使用到库的概念.
- 在Dart中,库的使用是通过import关键字引入的.
- library指令可以创建一个库,每个Dart文件都是一个库,即使没有使用library指令来指定.
Dart中的库主要有三种:
- 我们自定义的库
- import 'lib/xxx.dart';
- 系统内置库
- import 'dart:math';
- import 'dart:io';
- import 'dart:convert';
- Pub包管理系统中的库
- Page 1 | Top packages、Page 1 | Top packages、Search results for sdk:flutter
- 需要在自己项目根目录下新建一个pubspec.yaml
- 在pubspec.yaml文件,然后配置名称,描述,依赖等信息.
- 然后运行pub get 获取包下载到本地
- 项目中引入库 import 'package:http.dart' as http;
例如: 一个pubspec.yaml文件
name: xxxdescription: A new flutter module project.dependencies: http: ^0.12.0+2 date_format: ^1.0.6environment: sdk: '>=2.10.0
- 我们自定义的库
- 范型就是解决类、接口、方法的复用性,以及对不特定数据类型的支持(类型校验)
-
- 因此引入范型
- 同时支持返回String和int类型
上一篇:机房扩建哪里有提供?