那些你不知道的Dart细节之泛型和库(六)

释放双眼,带上耳机,听听看~!

前言

前几篇文章分别讲解了Dart中的变量、内置类型、函数(方法)、异常、类,对Dart的基本语法已经有了很多的了解,那么今天来说一下Dart中的泛型和库。前几篇文章没有看的,建议先看一下前几篇文章。

那些你不知道的Dart细节之变量

那些你不知道的Dart细节之内置类型

那些你不知道的Dart细节之函数(方法)

那些你不知道的Dart细节之操作符、流程控制语句、异常

那些你不知道的Dart细节之类的点点滴滴

那些你不知道的Dart细节之泛型和库

泛型

  • Java中的泛型信息是编译时的,泛型信息在运行时是不存在的

  • Dart的泛型类型是固化的,在运行时也有可以判断的具体类型


1
2
3
4
5
1var names = List<String>();
2print(names is List<String>);//true
3print(names.runtimeType); // List<String>
4
5

在Java中,可以测试对象是否为List,但无法测试它是否是List。但是在Dart中是预编译的。

其他的泛型使用方法和Java中的类似,这里就不赘述了。

库-使用核心库

使用import关键字来载入库:


1
2
3
4
5
6
7
1import "dart:math";
2
3void main() {
4  print(sqrt(4));//开平方 2.0
5}
6
7

对于内置的库,URI 使用特殊的 dart: scheme。对于其他的库,你可以使用文件系统路径或者 package: scheme。

库-载入第三方库

在Flutter中想使用第三方库的话需要在pubspec.yaml中的dependencies中添加依赖:


1
2
3
4
5
6
7
8
1dependencies:
2  flutter:
3    sdk: flutter
4
5  cupertino_icons: ^0.1.0
6  dio: ^2.1.0
7
8

添加完成之后点击右上角的packages get进行导入依赖。下面是三方哭调用方法:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1import "package:dio/dio.dart";
2
3void main() {
4  getHttp();
5}
6
7void getHttp() async {
8  try {
9    Response response = await Dio().get("https://www.baidu.com");
10    print(response);
11  } catch (e) {
12    print(e);
13  }
14}
15
16

这里给大家一个网站,需要寻找第三方库的时候直接在里面搜索即可:https://pub.dev/

库-指定库前缀

在Java编码过程经常会出现一个类中调用两个类中相同名字的方法,这时就需要全限定名称来调用了,但是在Dart中是不需要的:


1
2
3
4
5
6
7
8
9
1import 'MyLib1.dart' as lib1;
2import 'MyLib2.dart' as lib2;
3
4void main() {
5  var myLib = lib1.MyLib();
6  var myLib2 = lib2.MyLib();
7}
8
9

上面代码中MyLib1.dart 和 MyLib2.dart 都有一个名字为 MyLib 的类。

库-选择性载入

  • show-只载入库的某些部分

  • hide-筛选掉库的某些部分


1
2
3
4
5
6
7
1import 'Mylib1.dart' as lib1 show Test;
2import 'Mylib2.dart' as lib2 hide Test;
3
4var test = lib1.Test();
5var lib = lib2.MyLib();
6
7

如果只使用库的一部分功能,则可以选择需要导入的 内容。

库-延迟载入

  1. 使用deferred as导入

  2. 使用标识符调用loadLibrary()加载库


1
2
3
4
5
6
7
8
9
10
11
12
1import 'MyLib1.dart' deferred as lazyLib;
2
3void main() {
4  lazyLoad();
5}
6lazyLoad() async {
7  await lazyLib.loadLibrary();
8  var t = lazyLib.Test();
9  t.test();
10}
11
12

使用 await 关键字暂停代码执行一直到库加载完成。可提高程序启动速度。用在不常使用的功能和载入时间过长的包。

库-自定义库

首先将一个文件作为library:


1
2
3
4
5
6
7
8
1library mylib;
2
3part 'util.dart';
4part 'tool.dart';
5
6void printMyLib() => print('mylib');
7
8

然后使用part 把一个库分开到多个 Dart 文件中。


1
2
3
4
1part of mylib;
2void printTool() => print('tool');
3
4

1
2
3
4
1part of mylib;
2void printUtil() => print('util');
3
4

import不会完全共享作用域,而part之间是完全共享的。如果说在A库中import了B库,B库import了C库,A库是没有办法直接使用C库的对象的。而B,C若是A的part,那么三者共享所有对象。并且包含所有导入。


1
2
3
4
5
6
7
8
9
1import 'mylib/mylib.dart';
2
3void main() {
4  printMyLib();
5  printUtil();
6  printTool();
7}
8
9

总结

到这里为止Dart的第六篇文章完成。本篇文章主要讲解了一下Dart语言的泛型和库。下一篇文章讲解一下Dart中的异步操作,希望大家能够喜欢,对大家如果有帮助的话,欢迎点赞关注,如果有异议,可以留言进行讨论。

给TA打赏
共{{data.count}}人
人已打赏
安全技术

C++ 中 struct和class 的区别

2022-1-11 12:36:11

安全漏洞

Nessus 5.0 发布 - 漏洞扫描工具

2012-4-10 11:12:22

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索