complete类Completer中的许多方法都标记为"抽象",但实际上它可以在不实现的情况下直接调用.我真的很困惑.谁能帮助我?
是的,这可能有点令人困惑.虽然抽象类无法实例化,但可以通过定义工厂构造函数使它们看起来是可实例化的.这是什么Completer,Future以及其他抽象类:
abstract class Completer<T> {
factory Completer() => new _CompleterImpl<T>();
...
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以在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);
}
...
}
Run Code Online (Sandbox Code Playgroud)
你看complete(); 这是被调用的方法.
| 归档时间: |
|
| 查看次数: |
870 次 |
| 最近记录: |