//泛型就是解决类、接口、方法的复用性以及对不特定数据的支持
void main() {
print(printData<int>(2)); //int类型
print(printData<String>("zhoujian")); //String 类型
}
//定义一个泛型方法
T printData<T>(T value) {
return value;
}
[Running] dart "/Users/zhoujian/DartDemo/demo.dart"
2
zhoujian
[Done] exited with code=0 in 1.068 seconds
void main() {
//指定类型
List list = new List<String>();
list.add("zhoujian");
print(list);
PrintClass printClass = new PrintClass<String>();
printClass.addValue("物理");
printClass.addValue("化学");
printClass.printInfo();
PrintClass p = new PrintClass<int>();
p.addValue(89);
p.addValue(76);
p.printInfo();
}
//定义一个泛型类
class PrintClass<T> {
List list = new List<T>();
void addValue(T value) {
this.list.add(value);
}
void printInfo() {
for (var i = 0; i < this.list.length; i++) {
print(this.list[i]);
}
}
}
[Running] dart "/Users/zhoujian/DartDemo/demo1.dart"
[zhoujian]
物理
化学
89
76
[Done] exited with code=0 in 1.14 seconds
void main() {
FileCache fileCache = new FileCache<String>();
fileCache.setKey("index", "我是字符串");
MemoryCache memoryCache = new MemoryCache<Map>();
memoryCache.setKey("index", {"name": "zhoujian", "age": 30});
}
//定义泛型接口
abstract class Cache<T> {
getKey();
void setKey(String key, T value);
}
class FileCache<T> implements Cache<T> {
@override
getKey() {
return null;
}
@override
void setKey(String key, T value) {
print("我是FileCache:${value}");
}
}
class MemoryCache<T> implements Cache<T> {
@override
getKey() {
return null;
}
@override
void setKey(String key, T value) {
print("我是MemoryCache:${value}");
}
}
[Running] dart "/Users/zhoujian/DartDemo/demo2.dart"
我是FileCache:我是字符串
我是MemoryCache:{name: zhoujian, age: 30}
[Done] exited with code=0 in 1.161 seconds