Dart API参考中的抽象方法

时间:2012-12-01 11:12:40

标签: dart

complete中的许多方法(如Completer)都标记为“abstract”,但实际上它可以直接调用而不实现。我真的很困惑。有谁可以帮助我?

1 个答案:

答案 0 :(得分:7)

是的,这可能有点令人困惑。虽然无法实例化抽象类,但可以通过定义工厂构造函数使它们似乎可实例化。这是CompleterFuture和其他抽象类的作用:

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();这是被调用的方法。