本文共 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/