IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 【Dart】泛型梳理 -> 正文阅读

[移动开发]【Dart】泛型梳理

Dart泛型

泛型主要解决的是接口方法复用性、以及对不特定数据类型的支持(类型校验)

泛型方法

泛型方法最主要的就是不指定类型方法的参数类型或者是返回类型,也就是放弃类型检查,想实现的是传入什么,返回什么。

比如:传入number类型必须返回number类型,传入String类型必须返回String类型。

定义一个泛型方法:

T getValue<T>(T value) {
  return value;
}

调用:

print(getValue<String>("Dart 泛型方法"));

print(getValue<int>(123));

泛型类

泛型类型用于类的定义中,故被称为泛型类。通过泛型可以完成对一组类的操作对外开放相同的接口,如:List、Set、Map。

class MyList<T> {
  
  List list = <T>[];
  
  void add(T value) {
    this.list.add(value);
  }

  List getList() {
    return list;
  }
}

上述代码中通过泛型T来标识任意类型,可以在实例化的时候传入所需的类型,但是它们却有相同的实现方法。

泛型接口

在Java中使用泛型接口格式是:

interface 接口名<类型参数表>

在前面的文章有说到Dart的接口没有interface关键字定义接口,所以Dart中使用泛型接口的一般格式是:

abstract class 接口名<类型参数表>

定义一个泛型接口:

abstract class Cache<T> {

  getByKey(String key);
  
  void setByKey(String key, T value);
}

那的实现类就是实现这个接口:

class MemoryCache<T> implements Cache<T>{
  
  
  getByKey(String key) {   
    return null;
  }

  
  void setByKey(String key, T value) {
       print("value=${value} 已存储");
  }
}

调用:

var mc = MemoryCache<Map>();

mc.setByKey('index', {"name": "Mike", "age": 22});

Dart中的库

库的作用很明显可以让的开发模块化,在Dart中,库的使用时通过import关键字引入的。

Dart中的库主要有三种:

  • 自定义的库
    import 'lib/xxx.dart';

  • 系统内置库

import 'dart:math';
import 'dart:io';
  • Pub包管理系统中的库
pub.dev/packages

pub.flutter-io.cn/packages

pub.dartlang.org/flutter/

需要在自己想项目根目录新建一个pubspec.yaml;

在pubspec.yaml文件 然后配置名称 、描述、依赖等信息;

然后运行pub get获取包下载到本地;

项目中引入库import ‘package:http/http.dart’ as http。

Dart库引入冲突解决

当引入两个库中有相同名称标识符的时候,如果是Java通常通过写上完整的包名路径来指定使用的具体标识符,甚至不用import都可以,但是Dart里面是必须import的。当冲突的时候,可以使用as关键字来指定库的前缀,如下:

import 'package:lib1/lib1.dart';
import 'package:lib2/lib2.dart' as lib2;

库的部分导入

先定义一个userInfo.dart,并声明一些方法

void getName() {
  print('Mike');
}

void getAge() {
  print(22);
}

这个时候如果只需要getName()这个方法属性就可以使用部分导入:

import 'userInfo.dart' hide getName;

这样就只可以调用getName()方法,无法使用getAge()。

延时加载库

延迟加载也就是为懒加载,它可以让在需要的时候再进行加载,懒加载的好处是优化App的启动。

懒加载的使用可以通过deferred as关键字来指定。

定义一个lazyLoad.dart:

void init(){
  Person person = Person();
  person.getName();
}

class Person{

  void getName() {
    print('Mike');
  }
  void getAge() {
    print(22);
  }
}

然后延迟加载:

import 'lazyLoad.dart' deferred as lazyload; // deferred as 关键字指定

这里用到了async和await关键字,展开说一下。

async和await

asyncawait两个关键字是配合一起使用的,只有async方法才能使用await关键字调用方法,如果调用别的async方法必须使用await关键字。

  • async是让方法变成异步;

  • await是等待异步方法执行完成。

声明一个异步反方法:

asyncSample() async {
  return 'Dart async';
}

调用:

void main() async {
  var result = await asyncSample();
}

这里看main方法也加了async关键字,这是因为方法里要是使用await关键字,上面定义说了只有async方法才能使用await关键字调用方法

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:46:08  更:2022-10-17 12:47:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 0:31:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码