Dart 泛型


将类型参数化以达到代码复用
提高软件开发工作效率的一种数据类型

泛型是程序设计语言的特性
程序员在强类型程序设计语言中
定义一些可变部分
那些部分在使用前必须作出指明
各种程序设计语言和其编译器、运行环境对泛型的支持均不一样

泛型类是引用类型
是堆对象
主要是引入了类型参数这个概念
泛型的定义两种
1.程序编码中 包含类型参数的类型
也就是说泛型的参数只可以代表类
不能代表个别对象 (这是当今较常见的定义)
2.程序编码中 包含参数的类
其参数可以代表类或对象等等
人们大多把这称作模板
不论使用哪个定义
泛型的参数在真正使用泛型时都必须作出指明
强类型编程语言支持泛型
目的是加强类型安全及减少类转换的次数
但一些支持泛型的编程语言只能达到部分目的
Java 的泛型
Java 泛型的参数只可以代表类
不能代表个别对象
由于 Java 泛型的类型参数之实际类型在编译时会被消除
所以无法在运行时得知其类型参数的类型
Java 编译器在编译泛型时会自动加入类型转换的编码
故运行速度不会因为使用泛型而加快
Java 允许对个别泛型的类型参数进行约束
包括以下两种形式
假设 T 是泛型的类型参数
C 是一般类、泛类
或是泛型的类型参数
T 实现接口 I
T 是 C 或继承自 C
一个泛型类不能实现Throwable接口
C++ 的泛型/模板
C++ 无法对泛型的类型参数进行约束
编译时
每个被使用的封闭泛型类型
即是所有泛型参数的实际类型都已被指明的泛型
都会有独立的编码产生
编译器会在此时确保类型安全性
可是如果泛型要运用其泛型参数的某成员
而该泛型参数又不包含该成员的时候
编译器所产生的错误信息会看似与实际问题无关
增加出错的难度
Dart 支持泛型
var names = new List<String>();
names.add("zhangsan")

var maps = new Map<int, String>();
maps[1]="value";

// 字面量写法
var infos = <String>['Seth', 'Kathy', 'Lars'];
var pages = <String, String>{
  'index.html': 'Homepage',
  'robots.txt': 'Hints for web robots'
};
字面量
计算机科学中
字面量 literal 表达源代码中一个固定值的表示法 notation
计算机编程语言 具有对基本值的字面量表示
诸如:整数、浮点数以及字符串
而有很多也对布尔类型和字符类型的值也支持字面量表示
有些甚至对枚举类型的元素以及 数组、记录和对象等复合类型的值也支持字面量表示法

C语言关于复合字面量
字符串字面量(stringliteral)
是指双引号引住的一系列字符
双引号中可以没有字符
可以只有一个字符,也可以有很多个字符。
#include <stdio.h>
 int main(void){    
    int a = 10; // 10为int类型字面量
    char a[] = {"Hello world!"} // Hello world 为字符串形式字面量
    return 0;
}

字面量作为一种通用的
跨平台的数据交换格式
在程序界是公认的事实;