Dart 在构造函数中将其作为参数传递
Dart pass this as a parameter in a constructor
假设我有一个摘要class
abstract class OnClickHandler {
void doA();
void doB();
}
我有一个class
class MyClass {
OnClickHandler onClickHandler;
MyClass({
this.onClickHandler
})
void someFunction() {
onClickHandler.doA();
}
}
我有一个class
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 class 相同的实现呢?还是有 easier/better 方法来做到这一点?
您的问题是 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() {}
}
原因是构造函数中 { }
中的代码 运行 是在对象本身创建之后但在从构造函数返回对象之前执行的。
假设我有一个摘要class
abstract class OnClickHandler {
void doA();
void doB();
}
我有一个class
class MyClass {
OnClickHandler onClickHandler;
MyClass({
this.onClickHandler
})
void someFunction() {
onClickHandler.doA();
}
}
我有一个class
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 class 相同的实现呢?还是有 easier/better 方法来做到这一点?
您的问题是 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() {}
}
原因是构造函数中 { }
中的代码 运行 是在对象本身创建之后但在从构造函数返回对象之前执行的。