泛型方法
T getData<T>(T value){
return value;
}
void main(List<String> args) {
//没有类型校验
print(getData(23));
print("AAA");
//指定类型
print(getData<int>(34));
print(getData<String>("BBB"));
}
泛型类
class MyList<T> {
List list = <T>[];
void add(T value) {
this.list.add(value);
}
List getList() {
return list;
}
}
void main(List<String> args) {
// 可传入任意类型数据
MyList l = MyList();
l.add(1);
l.add("AA");
l.add(true);
print(l.getList()); //[1, AA, true]
//实例化的时候可指定传入类型数据
MyList l1 = new MyList<String>();//只能传入String的数据
l1.add("11");
l1.add("AA");
l1.add("33");
print(l1.getList()); //[11, AA, 33]
}
Dart中的泛型接口
示例:
实现数据缓存的功能:有文件缓存、内存缓存。内存缓存和文件缓存按照接口约束实现
1、定义一个泛型接口 约束实现它的子类必须有getByKey(key)和setByKey(key,value)
2、要求setByKey的时候的value的类型和实例化子类的时候指定的类型一致
abstract class Cache<T> {
getByKey(String key);
void setByKey(String key, T value);
}
class FileCache<T> implements Cache<T>{
@override
getByKey(String key) {
return key;
}
@override
void setByKey(String key, T value) {
print("我是文件缓存,把key=${key} value=${value}的数据写入到了内存中");
}
}
class MemoryCache<T> implements Cache<T>{
@override
getByKey(String key) {
return key;
}
@override
void setByKey(String key, T value) {
print("我是内存缓存,把key=${key} value=${value}的数据写入到了内存中");
}
}
void main(List<String> args) {
//指定传入类型为String
MemoryCache m = new MemoryCache<String>();
m.setByKey("内存", "数据A");
//指定传入类型为Map
MemoryCache m1 = new MemoryCache<Map>();
m1.setByKey("内存", {"name":"AA","age":23});
}
Dart学习记录,一起学习哦~