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 に答える