Flutter中泛型

2020-11-26  本文已影响0人  GaoEnron

泛型

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

  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;
 }
上一篇 下一篇

猜你喜欢

热点阅读