比方说,我有一个抽象类
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类一样的实现呢,还是有更简单的方法呢?
你的问题是 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对象内部的代码 { }
在对象本身被创建之后,但在对象从构造函数中返回之前执行。