Dart 2ベース(9)-パンチング

2051 ワード

目次
なぜ汎型を使うのですか?
セットの種類
パラメータの種類を制限する
汎型(Generaics)は<…>を用いて定義される.
型式変数は、Dart 2でE、T、K、Vを使用して宣言されます.例えば、Listなど.
  • はなぜ一般型を使うのですか?
  • 1.汎型タイプを指定して、コードがより安全で、解読しやすいです.
    2.泛型を使うとコードの重複も避けられます.
    //     
    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 getByKey(String key);
      void setByKey(String key, T value);
    }
    
    main(List args) {
      //   String  ,    String list,          
      List strList = List();
    
      strList.add("a");
      strList.add(1); //     
    
    }
  • は、集合タイプ
  • のために使用される.
    汎型はListとMapの直接パラメータ化に利用でき,また構造関数によるパラメータ化も可能である.
    Dart 2の一般的なタイプは具体化されています.これは運転中に自分のタイプの情報を持っているということです.
    main(List args) {
      //      
      var animals = ["cat", "dog"];
      var animalMap = {
        "cat": "tom",
        "dog": "jerry"
      };
      //          
      var animalList = List();
      var animalMap2 = Map();
    
      animalList.addAll(['bird', 'dog']);
      //    set ,      
      var animalSet = Set.from(animalList);
      //         
      print(animalList is List); // true
    }
  • 汎型パラメータタイプを制限する
  • 汎型を実装する場合、そのパラメータの種類を制限する必要があるなら、extendsキーワードを使用することができる.
    以下は公式サイトの例です.
    //   T   SomeBaseClass      
    class Foo {...}
    
    class Extender extends SomeBaseClass {...}
    
    void main() {
      //     SomeBaseClass      Extender     
      var someBaseClassFoo = new Foo();
      var extenderFoo = new Foo();
    
      //            
      var foo = new Foo();
    
      //      SomeBaseClass  ,  warn,      ,      。
      // var objectFoo = new Foo();
    }