泛型就是解决
类、接口、方法的复用性、以及对不特定的数据类型的支持(类型校验)强类型语言的一种补偿措施。
一、泛型方法
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> {@overrideMap<String, T> store = new Map();@overrideT? getByKey(String key) {return store[key] ?? null;}@overridevoid 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);}
