泛型
• 正确指定泛型类型有助于产生更好代码
var names = List<String>(); // 创建相应的数据
names.addAll(['Tom', 'Java', 'Json']);
names = <String>['Tom', 'Tom', 'Tom'];
• 泛型减少重复代码
而泛型就可以解决上面的问题,它通过对类型参数化,实现一个类针对多种数据类型操作的适配。
abstract class ObjectCache {
Object getByKey(String key);
void setByKey(String key, Object value);
}
abstract class StringCache {
String getByKey(String key);
void setByKey(String key, String value);
}
// 上方代码可以直接定义泛型,从而减少重复代码
abstract class Cache<T> {
T getByKey(String key);
void setByKey(String key, T value);
}
• 列表和哈希表构造函数和字面量均支持类型参数
var pages = <String, String> {
'index.html': 'homepage',
'index2.html': 'homepage',
'index3.html': 'homepage',
};
• 泛型集合的类型信息会保留到运行时
var names = List<String>();
names.addAll(['Tom', 'Tom', 'Tom']);
print(names is List<String>); // true
• 可以使用 extends 来限制类型参数可选范围
class Person {
String firstName;
Person(this.firstName);
Person.fromJson(Map data) {
print('in Person');
}
}
class Employee extends Person {
Employee.fromJson(Map data) : super.fromJson(data) {
print('in Employee');
}
}
• 泛型不仅支持类,还支持方法函数
class ParseClass<T>{
List list=new List<T>();
void add(T value){
this.list.add(value);
}
void printInformation(){
for(var i=0 ;i < this.list.length; i++){
print(this.list[i]);
}
}
}
getUserInforamtion<T>(T value){
return value;
}
网友评论