Dart将其作为构造函数中的参数传递

时间:2020-06-15 14:38:53

标签: dart interface abstract

让我们说我有一个抽象类

abstract class OnClickHandler {
    void doA();
    void doB();
} 

我上课

class MyClass {

  OnClickHandler onClickHandler;

  MyClass({
   this.onClickHandler
  })

  void someFunction() {
  onClickHandler.doA();
  }

}

我有课

class Main implements onClickHandler {

  // This throws me an error
  MyClass _myClass = MyClass(onClickHandler = this);  // <- Invalid reference to 'this' expression

  @override
  void doA() {}

  @override
  void doB() {}
}

我怎么能说使用与Main类相同的实现?还是有更简单/更好的方法来做到这一点?

1 个答案:

答案 0 :(得分:1)

您的问题是this尚不存在,因为仍在创建对象。 Dart对象的构建分两个阶段进行,可能很难理解。

如果将程序更改为以下程序,它将起作用:

abstract class OnClickHandler {
  void doA();
  void doB();
}

class MyClass {
  OnClickHandler onClickHandler;

  MyClass({this.onClickHandler});

  void someFunction() {
    onClickHandler.doA();
  }
}

class Main implements OnClickHandler {
  MyClass _myClass;

  Main() {
    _myClass = MyClass(onClickHandler: this);
  }

  @override
  void doA() {}

  @override
  void doB() {}
}

原因是在构造函数内部{ }中运行的代码是在创建对象本身之后但在从构造函数返回对象之前执行的。