泛型

泛型通常是类型安全所必需的,他们对于写出严谨高质量的代码是很有用的:

  • 适当地指定泛型类型可以生成更好的代码,增强可读性
  • 可以使用泛型来减少代码重复

Dart中的泛型用法与Java中类似。

// 泛型
var names = new List<String>();
names.add("zhangsan")

var maps = new Map<int, String>();
maps[1]="value";

// 字面量写法
var infos = <String>['Seth', 'Kathy', 'Lars'];

var pages = <String, String>{
  'index.html': 'Homepage',
  'robots.txt': 'Hints for web robots'
};

使用泛型,减少重复代码。

未使用泛型,根据设置不同类型的值,会产生大量重复代码

 abstract class Cache {
   void setStringValue(String v);
   void setIntValue(int v);
   String getStringValue();
   int getIntValue();
 }

使用泛型

  abstract class Cache<T> {
   void setValue(T v);
   T getValue();
 }

限制参数类型

在实现泛型类型时,希望限制其参数的类型。则可以使用extends

class Foo<T extends SomeBaseClass> {

  String toString() => "Instance of 'Foo<$T>'";
}

class Extender extends SomeBaseClass {...}

可以使用SomeBaseClass 或它的任何子类作为泛型参数,指定任何非somebaseclass类型都会导致错误

var someBaseClassFoo = Foo<SomeBaseClass>();
var extenderFoo = Foo<Extender>();

方法中使用泛型

最初,Dart仅仅在类中支持泛型。后来一种称为泛型方法的新语法允许在方法和函数中使用类型参数。

T first<T>(List<T> ts) {

  T tmp = ts[0];
  return tmp;
}

公众号“编程之路从0到1”

20190301102949549

Copyright © Arcticfox 2020 all right reserved,powered by Gitbook文档修订于: 2024-06-09 20:22:55

results matching ""

    No results matching ""