Dart API参考中的抽象方法

Dart API参考中的抽象方法,dart,Dart,类Completer中的许多方法,如complete,都标记为“抽象”,但实际上它可以直接调用,而无需实现。我真的很困惑。有人能帮我吗?是的,这可能有点让人困惑。虽然抽象类不能实例化,但可以通过定义工厂构造函数使它们看起来是可实例化的。这就是Completer、Future和其他抽象类所做的: abstract class Completer<T> { factory Completer() => new _CompleterImpl<T>(); ...

Completer
中的许多方法,如
complete
,都标记为“抽象”,但实际上它可以直接调用,而无需实现。我真的很困惑。有人能帮我吗?

是的,这可能有点让人困惑。虽然抽象类不能实例化,但可以通过定义工厂构造函数使它们看起来是可实例化的。这就是
Completer
Future
和其他抽象类所做的:

abstract class Completer<T> {

  factory Completer() => new _CompleterImpl<T>();

  ...
}

您将看到
complete()
;这就是正在调用的方法。

我很困惑。OP询问了抽象方法,被接受的答案直接进入抽象类。
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);
  }
  ...
}