在Java中,泛型是通过类型擦除来实现的,但在Dart中实打实的泛型:
var names = <String>[]; names.addAll(['Tom',"Cat"]); // is 可以用于类型判断 print(names is List<String>); // true print(names is List); // true print(names is List<int>); //false
你可以通过extends关键词来限制泛型类型,这点和Java一样:
abstract class Animal{}class Cat extends Animal{}class Ext<T extends Animal>{T data;}void main() {var e = Ext(); // okvar e1 = Ext<Animal>(); // okvar e2 = Ext<Cat>(); // okvar e3 = Ext<int>(); // compile error}
使用类库有生命力的编程语言,它背后都有一个强大的类库,它们可以让我们站在巨人的肩膀上,又免于重新造轮子 。
导入类库在Dart里面,通过import关键词来导入类库 。
内置的类库使用dart:开头引入:
import 'dart:io';
了解更多内置的类库可以查看这里 。
第三方类库或者本地的dart文件用package:开头:
比如导入用于网络请求的dio库:
import 'package:dio/dio.dart';
Dart 应用本身就是一个库,比如我的应用名是ccsys,导入其他文件夹的类:
import 'package:ccsys/common/net_utils.dart';import 'package:ccsys/model/user.dart';
如果你使用IDE来开发,一般这个事情不用你来操心,它会自动帮你导入的 。
Dart 通过pub.dev来管理类库,类似Java世界的Maven 或者Node.js的npm一样,你可以在里面找到非常多实用的库 。
解决类名冲突如果导入的类库有类名冲突,可以通过as使用别名来避免这个问题:
import 'package:lib1/lib1.dart';import 'package:lib2/lib2.dart' as lib2;// 使用来自 lib1 的 ElementElement element1 = Element();// 使用来自 lib2 的 Elementlib2.Element element2 = lib2.Element();
导入部分类在一个dart文件中,可能会存在很多个类,如果你只想引用其中几个,你可以增加show或者hide来处理:
//文件:my_lib.dartclass One {}class Two{}class Three{}
使用show导入One和Two类:
//文件:test.dartimport 'my_lib.dart' show One, Two;void main() {var one = One();var two = Two();//compile errorvar three = Three();}
也可以使用hide排除Three,和上面是等价的:
//文件:test.dartimport 'my_lib.dart' hide Three;void main() {var one = One();var two = Two();}
延迟加载库目前只有在web app(dart2js)中才支持延迟加载,Flutter、Dart VM是不支持的,我们这里仅做一下简单介绍 。
你需要通过deferred as来声明延迟加载该类库:
import 'package:greetings/hello.dart' deferred as hello;
当你需要使用的时候,通过loadLibrary()加载:
Future greet() async {await hello.loadLibrary();hello.printGreeting();}
你可以多次调用loadLibrary,它不会被重复加载 。
异步支持这个话题稍微复杂,我们将用另外一篇文章独立讨论这个问题,请留意下一篇内容 。
参考资料
- 学习Dart的十大理由
- A tour of the Dart language
- Dart 常量构造器的理解
- JavaScript 闭包
【Dart 语言基础入门篇】
推荐阅读
- PHP 安全问题入门:10 个常见安全问题 + 实例讲解
- 混元太极拳入门须知及修炼纲要
- hacker入门方向
- 买8折奔驰还是9折的奥迪?豪华入门级车型怎么选
- macOS 10.15 新手入门,使用技巧分享
- 黑客入门利器,dvwa文件上传漏洞,带你进入黑客大门
- mysql入门级,20分钟搞定
- IP地址基础入门知识
- 最经典的黑客技术入门知识大全
- GNOME Linux 桌面入门