Dart基础-泛型和库

简介: <div class="markdown_views"><h2 id="泛型">泛型</h2><p>如果你看过API文档的基本类型数组和列表,你会发现实际上所有都是泛型,使用泛型可以提高代码的可读性</p><pre class="prettyprint"><code class=" hljs javascript"><span class="hljs-keywor

泛型

如果你看过API文档的基本类型数组和列表,你会发现实际上所有都是泛型,使用泛型可以提高代码的可读性

var names = new List<String>();
names.addAll(['Seth', 'Kathy', 'Lars']);
//检查模式编译失败,生产模式编译成功
names.add(42);

使用泛型的另一个原因是减少代码重复,泛型可以创建多类型共享的接口,同时还能在检查模式早期预警,假如您创建一个接口缓存对象

abstract class ObjectCache {
  Object getByKey(String key);
  setByKey(String key, Object value);
}

如果你想要的只是String的接口,你可以创建另一个接口

abstract class StringCache {
  String getByKey(String key);
  setByKey(String key, String value);
}

再如果,你想要一个number的接口,是不是很麻烦,使用泛型类型可以节省您创建这些接口的麻烦

abstract class Cache<T> {
  T getByKey(String key);
  setByKey(String key, T value);
}

在上面代码中,T是类型的替身,可以认为是开发人员自定义的类型的占位符

使用文字集合

字符串类型的list和map可以参数化

var names = <String>['Seth', 'Kathy', 'Lars'];
var pages = <Stringk, String>{
  'index.html': 'Homepage',
  'robots.txt': 'Hints for web robots',
  'humans.txt': 'We are people, not machines'
};

用参数化类型作构造函数

指定一个或多个类型使用一个构造函数

var names = new List<String>();
names.addAll(['Seth', 'Kathy', 'Lars']);
var nameSet = new Set<String>.from(names);

下面的代码创建了map、integer和Key Value

var views = new Map<int, View>();

泛型集合和包含的类型

dart的泛型类型需要具体化,这意味着泛型在运行时携带着类型信息

var names = new List<String>();
names.addAll(['Seth', 'Kathy', 'Lars']);
print(names is List<String>);

import、part和library指令可以帮助您创建模块和共享代码,库不仅提供api,还是privacy权限的单位:标识符为下划线( _ )是只有在包内可见的,每个dart应用程序都是一个库,即使它不使用库的指令

使用库

使用 import 指定一个命名空间从一个库中使用另一个库

import 'dart:html';

dart: 开头的是dart内置的库,其他的库用 package: 开头

import 'dart:io';
import 'package:mylib/mylib.dart';
import 'package:utils/utils.dart';

指定库的前缀

如果你导入的两个库有冲突的标识符,你可以为其中一个或两个库都指定一个前缀

import 'package:lib1/lib1.dart';
import 'package:lib2/lib2.dart' as lib2;
// ...
var element1 = new Element();
var element2 = new lib2.Element();

导入库的一部分

如果你只想要使用一个库的一部分,可以选择性的导入

//只导入foo
import 'package:lib1/lib1.dart' show foo;

//导入除了foo以外的所有
import 'package:lib2/lib2.dart' hide foo;

延迟加载库

在必要的时候允许程序延迟加载一个库的需求,延迟加载库,您必须使用 deferred as

import 'package:deferred/hello.dart' deferred as hello;

当你需要使用库,使用 loadLibrary() 调用库

greet() async {
  await hello.loadLibrary();
  hello.printGreeting();
}

上面代码中,await 关键字暂停执行直到加载库,您可以多次使用loadLibrary(),库只加载一次

声明库

使用 library identifier 指定库的标识符

library ballgame;
import 'dart:html';

//...

关联文件与库

第一个 ballgame.dart 声明了ballgame库和需要的ball.dart和util.dart

library ballgame;

import 'dart:html';
//...

part 'ball.dart';
part 'util.dart';

//...

第二个 ball.dart 实现ballgame的一部分

part of ballgame;

//...

第三个 util.dart 实现ballgame的其他部分

part of ballgame;

//...

重导出库

您可以通过再结合或重新包装库的部分或全部

library french;

hello() => print('Bonjour!');
goodbye() => print('Au Revoir!');

library togo;

import 'french.dart';
export 'french.dart' show hello;

import 'togo.dart';

void main() {
  hello();
  goodbye();
}
目录
相关文章
N..
|
30天前
|
Dart
Dart语言中类的定义和使用
Dart语言中类的定义和使用
N..
11 0
|
3月前
|
Dart 数据安全/隐私保护
Dart笔记:Dart 语言中的存取器及其用法解析
Dart笔记:Dart 语言中的存取器及其用法解析
51 0
N..
|
30天前
|
自然语言处理 Dart 算法
Dart语言中函数的定义
Dart语言中函数的定义
N..
10 0
|
3月前
|
存储 Dart 编译器
Dart笔记:Dart语言中的注解(元数据)
Dart笔记:Dart语言中的注解(元数据)
80 0
|
9月前
|
存储 Dart JavaScript
《深入浅出Dart》Dart库的使用和创建
Dart库的使用和创建 引言 在Dart中,代码重用和模块化可以通过库(libraries)和包(packages)实现。一个库就是一组代码,被一起打包为了实现一种或多种特定功能。一个包则是一种发布和分享Dart库的方式。在这一章,我们将详细介绍如何使用和创建Dart库和包,以及如何实现一个具有大数相加功能的库。 Dart库的使用
85 0
|
6月前
|
存储 Dart JavaScript
【Dart语言解密】想要深入了解Dart语法和类型变量吗?
【Dart语言解密】想要深入了解Dart语法和类型变量吗?
130 0
|
9月前
|
存储 Dart 安全
《深入浅出Dart》Dart中的泛型
Dart中泛型 泛型,一种强大而灵活的编程工具,可以让开发者创建可以适应任何类型的代码,同时又保持类型安全。这是在许多编程语言中都存在的一种重要的特性,Dart也不例外。在这篇文章中,我们将深入探讨Dart中的泛型。
98 0
|
Dart
dart 类型提升
dart 类型提升
91 0
|
Dart
[Flutter]足够入门的Dart语言系列之面向对象:类的定义详解、成员和实例使用
类表示的是分类,一类问题或事物,它是对具体或现实世界的抽象。比如动物类、犬科动物类、猫科动物类、房子类、数学类,类是具体事物的描述,它不是指具体的某个动物、某栋房子、某个数学题,而是对它们的概括...
229 0
[Flutter]足够入门的Dart语言系列之面向对象:类的定义详解、成员和实例使用

热门文章

最新文章