泛型
泛型通常是类型安全所必需的,他们对于写出严谨高质量的代码是很有用的:
- 适当地指定泛型类型可以生成更好的代码,增强可读性
- 可以使用泛型来减少代码重复
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”