博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Dart基础-泛型和库
阅读量:6955 次
发布时间:2019-06-27

本文共 2682 字,大约阅读时间需要 8 分钟。

泛型

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

var names = new List
();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 getByKey(String key); setByKey(String key, T value);}

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

使用文字集合

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

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

用参数化类型作构造函数

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

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

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

var views = new Map
();

泛型集合和包含的类型

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

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

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();

导入库的一部分

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

//只导入fooimport '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();}

转载地址:http://xynil.baihongyu.com/

你可能感兴趣的文章
HTTP协议详解(真的很经典)
查看>>
EMC销售部全球CTO Patricia Florissi:大数据不是炒作
查看>>
判断字符串是否是合法的ipv4地址
查看>>
Linux系统手动安装rzsz 软件包
查看>>
Hyper-V安装笔记
查看>>
Golang面试题解析(二)
查看>>
Juniper SRX与思科跑IPSEC ×××+OSPF
查看>>
C语言学习之路(1)
查看>>
passwd修改用户密码
查看>>
Windows Phone(三)WP7版 " 记账本" 开发(使用SQLite数据库)
查看>>
CSS 几款比较常用的翻转特效(转载)
查看>>
html5 拖拽事件
查看>>
Spring创建对象的三种方式以及创建时间
查看>>
IO多路复用, 基于IO多路复用+socket实现并发请求(一个线程100个请求), 协程
查看>>
大白话Vue源码系列(03):生成AST
查看>>
vi / vim 删除以及其它命令
查看>>
Codeforces Round #564 (Div. 2) B. Nauuo and Chess
查看>>
Android 微信第三方登录
查看>>
Jsoup后台解析html、jsp网页
查看>>
JsonModel 的使用
查看>>