complete
类中的许多方法Completer
都被标记为“抽象”,但实际上它可以直接调用而无需实现。我真的很困惑。有人可以帮我吗?
问问题
1058 次
1 回答
7
是的,这可能有点令人困惑。虽然抽象类不能被实例化,但可以通过定义工厂构造函数使它们看起来是可实例化的。这就是Completer
,Future
和其他抽象类所做的:
abstract class Completer<T> {
factory Completer() => new _CompleterImpl<T>();
...
}
然后,您可以在构造函数创建的对象上调用方法factory
。在上面的示例中,factory Completer()
返回一个新_CompleterImpl
对象。查看该类的(截断)代码:
class _CompleterImpl<T> implements Completer<T> {
final _FutureImpl<T> _futureImpl;
_CompleterImpl() : _futureImpl = new _FutureImpl() {}
Future<T> get future {
return _futureImpl;
}
void complete(T value) {
_futureImpl._setValue(value);
}
...
}
你看complete()
;那就是被调用的方法。
于 2012-12-01T16:39:26.993 回答