美文网首页
Flutter中泛型

Flutter中泛型

作者: GaoEnron | 来源:发表于2020-11-26 14:01 被阅读0次

    泛型

    • 正确指定泛型类型有助于产生更好代码

      var names = List<String>(); // 创建相应的数据
      names.addAll(['Tom', 'Java', 'Json']);
      names = <String>['Tom', 'Tom', 'Tom'];
    

    • 泛型减少重复代码

    而泛型就可以解决上面的问题,它通过对类型参数化,实现一个类针对多种数据类型操作的适配。

    abstract class ObjectCache {
      Object getByKey(String key);
      void setByKey(String key, Object value);
    }
    
    abstract class StringCache {
      String getByKey(String key);
      void setByKey(String key, String value);
    }
    // 上方代码可以直接定义泛型,从而减少重复代码
    abstract class Cache<T> {
      T getByKey(String key);
      void setByKey(String key, T value);
    }
    
    

    • 列表和哈希表构造函数和字面量均支持类型参数

    var pages = <String, String> {
      'index.html': 'homepage',
      'index2.html': 'homepage',
      'index3.html': 'homepage',
     };
    

    • 泛型集合的类型信息会保留到运行时

    var names = List<String>();
    names.addAll(['Tom', 'Tom', 'Tom']);
    print(names is List<String>); // true
    

    • 可以使用 extends 来限制类型参数可选范围

    class Person {
      String firstName;
      Person(this.firstName);
      Person.fromJson(Map data) {
        print('in Person');
      }
    }
    
    class Employee extends Person {
      Employee.fromJson(Map data) : super.fromJson(data) {
        print('in Employee');
      }
    }
    

    • 泛型不仅支持类,还支持方法函数

    class ParseClass<T>{
          List list=new List<T>();
          void add(T value){
              this.list.add(value);
          }
          void printInformation(){          
              for(var i=0 ;i < this.list.length; i++){
                print(this.list[i]);
              }
          }
     }
    
     getUserInforamtion<T>(T value){
           return value;
     }
    

    相关文章

      网友评论

          本文标题:Flutter中泛型

          本文链接:https://www.haomeiwen.com/subject/kkwaiktx.html