泛型就是解决
类、接口、方法
的复用性、以及对不特定的数据类型的支持(类型校验)强类型语言的一种补偿措施。
一、泛型方法
T getData<T>(T value) {
return value;
}
void main() {
print(getData('没有类型校验'));
print(getData<String>('调用的时候动态传入泛型的类型,起到类型约束'));
print(getData<int>(123));
}
二、泛型类
内置类
Set<String> s1 = new Set();// √
Set s2 = new Set<String>();// × -- 无静态检查
Set<String> s3 = new Set<String>();// 不推荐 -- 繁琐
s1.add('仅支持字符串');
s2.add(1111);// 运行时会报错,但没有静态检查
s3.add('仅支持字符串');
自定义类
class MySet<T> {
Set<T> s1 = new Set();
void add(T value)=>this.s1.add(value);
void printAll() {
s1.forEach((element)=> print(element));
}
}
void main() {
MySet<int> ms1 = new MySet();
ms1.add(11);
ms1.add(22);
ms1.printAll();
}
三、泛型接口
abstract class Cache<T> {
Map<String, T> store = new Map();
getByKey(String key);
void setByKey(String key, T value);
}
class MemoryCache<T> implements Cache<T> {
@override
Map<String, T> store = new Map();
@override
T? getByKey(String key) {
return store[key] ?? null;
}
@override
void setByKey(String key, T value) {
store[key] = value;
}
}
void main() {
MemoryCache<String> mc1 = new MemoryCache();
mc1.setByKey('hobby', 'play');
print(mc1.getByKey('hobby'));
print(mc1.store);
}