通俗理解就是:

泛型就是解决 类 接口 方法的复用性以及对不特定数据类型的支持(类型校验)

泛型方法

  1. // 泛型方法的定义
  2. T getData<T>(T val) {
  3. return val;
  4. }
  5. void main() {
  6. // 泛型方法的调用
  7. print(getData<String>('lynn'));
  8. print(getData<int>(123));
  9. print(getData<bool>(true));
  10. }

泛型类

  1. class PrintList<T> {
  2. List<T> list = [];
  3. void add(T val){
  4. this.list.add(val);
  5. }
  6. void printInfo(){
  7. for (var i = 0; i < this.list.length; i++) {
  8. print(this.list[i]);
  9. }
  10. }
  11. }
  12. void main() {
  13. PrintList list = new PrintList<int>();
  14. list.add(1);
  15. list.add(2);
  16. list.add(3);
  17. list.printInfo();
  18. }

泛型接口

  1. // 泛型 接口
  2. abstract class Cache<T> {
  3. getCache(String key);
  4. void setCache(String key , T value);
  5. }
  6. // 文件缓存
  7. class FileCache<T> implements Cache<T> {
  8. @override
  9. getCache(String key) {
  10. return key;
  11. }
  12. @override
  13. setCache(String key, T value) {
  14. print('我是文件缓存 --- key=$key 已存入文件中');
  15. }
  16. }
  17. // 内存缓存
  18. class MemoryCache<T> implements Cache<T> {
  19. @override
  20. getCache(String key) {
  21. return key;
  22. }
  23. @override
  24. setCache(String key, T value) {
  25. print('我是内存缓存 --- key=$key 已存入文件中');
  26. }
  27. }
  28. void main() {
  29. FileCache fileCache = new FileCache<String>();
  30. fileCache.setCache('文件缓存', '文件');
  31. // fileCache.setCache('文件缓存', 123); 报错
  32. MemoryCache memoryCache = new MemoryCache<int>();
  33. memoryCache.setCache('内存缓存', 123);
  34. // memoryCache.setCache('内存缓存', '123'); 报错
  35. }