Dart在构造函数中把它作为一个参数传递给你。

问题描述 投票:0回答:1

比方说,我有一个抽象类

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类一样的实现呢,还是有更简单的方法呢?

dart interface abstract
1个回答
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() {}
}

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

© www.soinside.com 2019 - 2024. All rights reserved.