小工具知识网

当前位置: 首页 > 行业知识 > Dart语法下

行业知识

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中的库主要有三种:

                            1. 我们自定义的库
                              1. import 'lib/xxx.dart';
                            2. 系统内置库
                              1. import 'dart:math';
                              2. import 'dart:io';
                              3. import 'dart:convert';
                            3. Pub包管理系统中的库
                              1. Page 1 | Top packages、Page 1 | Top packages、Search results for sdk:flutter
                              2. 需要在自己项目根目录下新建一个pubspec.yaml
                              3. 在pubspec.yaml文件,然后配置名称,描述,依赖等信息.
                              4. 然后运行pub get 获取包下载到本地
                              5. 项目中引入库 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 

上一篇:机房扩建哪里有提供?

下一篇:Win10管理员权限获取,轻松删除操作指南