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

简介: Dart中的泛型和库

前言

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

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

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

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

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

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

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

泛型

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

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

var names = List<String>();
print(names is List<String>);//true
print(names.runtimeType); // List<String> 

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

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

库-使用核心库

使用import关键字来载入库:

import "dart:math";
void main() {
  print(sqrt(4));//开平方 2.0
}

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

库-载入第三方库

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

dependencies:
  flutter:
    sdk: flutter
  cupertino_icons: ^0.1.0
  dio: ^2.1.0

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

import "package:dio/dio.dart";
void main() {
  getHttp();
}
void getHttp() async {
  try {
    Response response = await Dio().get("https://www.baidu.com");
    print(response);
  } catch (e) {
    print(e);
  }
}

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

库-指定库前缀

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


import 'MyLib1.dart' as lib1; 
import 'MyLib2.dart' as lib2; 
void main() {
  var myLib = lib1.MyLib();
  var myLib2 = lib2.MyLib();
}

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

库-选择性载入

show-只载入库的某些部分

hide-筛选掉库的某些部分

import 'Mylib1.dart' as lib1 show Test;
import 'Mylib2.dart' as lib2 hide Test;
var test = lib1.Test();
var lib = lib2.MyLib();

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

库-延迟载入

使用deferred as导入

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

import 'MyLib1.dart' deferred as lazyLib;
void main() {
  lazyLoad();
}
lazyLoad() async {
  await lazyLib.loadLibrary();
  var t = lazyLib.Test();
  t.test();
}

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

库-自定义库

首先将一个文件作为library:

library mylib;
part 'util.dart';
part 'tool.dart';
void printMyLib() => print('mylib');

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

part of mylib;
void printTool() => print('tool');
part of mylib;
void printUtil() => print('util');

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

import 'mylib/mylib.dart';
void main() {
  printMyLib();
  printUtil();
  printTool();
}

总结

到这里为止Dart的第六篇文章完成。本篇文章主要讲解了一下Dart语言的泛型和库。下一篇文章讲解一下Dart中的异步操作,希望大家能够喜欢

目录
相关文章
N..
|
7月前
|
Dart
Dart语言中类的定义和使用
Dart语言中类的定义和使用
N..
76 0
|
7月前
|
Dart 数据安全/隐私保护
Dart笔记:Dart 语言中的存取器及其用法解析
Dart笔记:Dart 语言中的存取器及其用法解析
84 0
|
存储 Dart 索引
带你读《深入浅出Dart》六、Dart中的集合类型(1)
带你读《深入浅出Dart》六、Dart中的集合类型(1)
TypeScript-类和泛型和ypeScript-接口合并现象
TypeScript-类和泛型和ypeScript-接口合并现象
63 0
|
4月前
|
算法 Python
Python 中的继承:强大的代码复用机制
【8月更文挑战第23天】
69 0
|
7月前
|
IDE Java 开发工具
讨论 Python 中泛型(或类似泛型的功能)的优点和缺点
【5月更文挑战第8天】Python虽无显式泛型系统,但可通过类型注解和工具实现类似功能。优点包括提升代码可读性、静态类型检查、更好的IDE支持、灵活性和可逐渐引入。缺点涉及运行时性能开销、学习成本、非强制性及与旧代码集成问题。适当使用工具和实践可管理这些挑战。
48 2
带你读《深入浅出Dart》六、Dart中的集合类型(2)
带你读《深入浅出Dart》六、Dart中的集合类型(2)
N..
|
7月前
|
自然语言处理 Dart 算法
Dart语言中函数的定义
Dart语言中函数的定义
N..
56 0
|
7月前
|
存储 Dart 编译器
Dart笔记:Dart语言中的注解(元数据)
Dart笔记:Dart语言中的注解(元数据)
441 0
|
存储 Dart 安全
带你读《深入浅出Dart》十九、Dart中泛型
带你读《深入浅出Dart》十九、Dart中泛型
下一篇
DataWorks