typedef定义如下:
typedef 给某一种特定的函数类型起了一个名字,可以认为是一个类型的别名。或者这样理解:
自己定义了一种数据类型,不过这种数据类型是函数类型,按照这种类型实例化后的对象,就会具备类型检查;
栗子举起,先来一个没有typedef定义:
class SortedCollection { Function compare; SortedCollection(int f(Object a, Object b)) { compare = f; } } int sort(Object a, Object b) => 0; void main() { SortedCollection coll = new SortedCollection(sort); assert(coll.compare is Function) }
可以看到coll.compare已经丢失了函数的具体信息;
再来一个通过typedef保存别的栗子:
typedef int Compare(Object a, Object b); class SortedCollection { Compare compare; SortedCollection(this.compare); } int sort(Object a, Object b) => 0; void main() { SortedCollection coll = new SortedCollection(sort); assert(coll.compare is Function); assert(coll.compare is Compare); }
可以看到,我们通过typedef,定义了Compare类型,即使在int sort 传入后,compare仍旧保持Compare的类型;
基本上typedef就是这样,最后说个高级一丢的玩法,泛型函数别名:
typedef int Compare<T>(T a, T b); int sort(int a, int b) => a - b; void main() { assert(sort is Compare<int>); }