目录
通俗理解:泛型就是解决 类 接口 方法的复用性、以及对不特定数据类型的支持(类型校验)
泛型简单使用
main(){
print(getData2("XXX"));
getData2<String>("XXX");
getData2<int>(1);
}
String getData(String value) {
return value;
}
//不指定返回类型放弃了类型检查。我们现在想实现的是传入什么 返回什么。
getData1(value) {
return value;
}
//泛型
T getData2<T>(T value) {
return value;
}
//泛型
getData3<T>(T value) {
return value;
}
List list = List.filled(2, "");
list[0] = "张三";
list[1] = "李四";
print(list);
List list1 = List<String>.filled(2, "");
list1[0] = "张三";
list1[1] = "李四";
print(list1);
List list2 = List<int>.filled(2, 0);
list2[0] = 1;
list2[1] = 2;
print(list2);
泛型类的简单使用
main() {
var list3 = MyList();
list3.add(1);
list3.add(5);
print(list3.getList());
//可以设置多个类型的数据
var list4 = MyList1();
list4.add("小飞");
list4.add(5);
list4.add(true);
print(list4.getList());
}
class MyList {
List list = <int>[];
void add(int value) {
this.list.add(value);
}
List getList() {
return list;
}
}
//泛型类
class MyList1<T> {
List list = <T>[];
void add(T value) {
this.list.add(value);
}
List getList() {
return list;
}
}
泛型接口的使用
/**
Dart中的泛型接口:
实现数据缓存的功能:有文件缓存、和内缓存。内存缓存和文件缓存按照接口约束实现。
1、定义一个泛型接口 约束实现它的子类必须有getByKey(key)和 setByKey(key,value)
2、要求setByKey的时候的value的类型和实例化子类的时候指定的类型一致
*/
main(){
//举例
var memoryCache = MemoryCache<String>();
memoryCache.setBykey("name", "张三");
var memoryCache1 = MemoryCache<Map>();
memoryCache1.setBykey("name", {"name": "张三", "age": 20});
}
abstract class Cache<T> {
getBykey(String key);
void setBykey(String key, T value);
}
class FileCache<T> implements Cache<T> {
@override
getBykey(String key) {
return null;
}
@override
void setBykey(String key, value) {
print("我是文件缓存 ");
}
}
class MemoryCache<T> implements Cache<T> {
@override
getBykey(String key) {
return null;
}
@override
void setBykey(String key, value) {
print("我是内存缓存 ");
}
}