dart语法7-泛型
2020-05-16 本文已影响0人
jxtx
dart语法1
dart语法2-内置类型
dart语法3-函数
dart语法4-操作符
dart语法5-异常
dart语法6-类
dart语法7-泛型
dart语法8-库
dart语法9-异步
dart语法10-生成器
dart语法11
泛型
泛型函数
1.Dart1.21开始可以使用泛型函数。
2.泛型函数可以在以下几个地方使用类型参数:
<1> 函数的返回值类型。
<2> 参数的类型。
<3> 局部变量的类型。
main() {
K addCache<K, V>(K key, V value) {
K temp = key;
print('${key}: ${value}');
return temp;
}
var key = addCache('dongnao', 'damon');
print(key);
}
构造函数泛型
要在使用构造函数时指定一个或多个类型,可将类型放在类名称后面的尖括号<...>中。
main() {
var p = Phone<String>('123456');
print(p.mobileNumber);
}
class Phone<T> {
final T mobileNumber;
Phone(this.mobileNumber);
}
泛型限制
实现泛型类型时,您可能希望限制其参数的类型,可以在<>里面使用extends。
main() {
var footMassage = FootMassage();
var m = Massage<FootMassage>(footMassage);
m.massage.doMassage();
}
class Massage<T extends FootMassage > {
final T massage;
Massage(this.massage);
}
class FootMassage {
void doMassage() {
print('脚底按摩');
}
}
与java区别
- Java中的泛型信息是编译时的,泛型信息在运行时是不存在的
- Dart的泛型类型是固化的,在运行时也有可以判断的具体类型
在Java中,可以测试对象是否为List,但无法测试它是否是List<String>。
var names = List<String>();
print(names is List<String>);//true
print(names.runtimeType); // List<String>