我的 Dart 应用程序具有以下类层次结构:
abstract class AbstractPresenter {
AbstractView view;
AbstractPresenter(this.view);
void start(EventBus eventBus) {
view.presenter = this;
querySelector("body").innerHTML = view.render();
}
}
abstract class SigninPresenter implements AbstractPresenter {
void onSignin(MouseEvent mouseEvent);
}
class DefaultSigninPresenter implements SigninPresenter {
// Lots of code
}
abstract class AbstractView {
AbstractPresenter presenter;
AbstractView(this.presenter);
String render();
void bindUI(String html);
}
abstract class SigninView implements AbstractView {
SigninView(AbstractPresenter presenter) : super(presenter);
LabelElement getSigninLabel();
void setSigninLabel(LabelElement signinLabel);
InputElement getEmailTextField();
void setEmailTextField(InputElement emailTextField);
}
class DefaultSigninView implements SigninView {
LabelElement signinLabel;
InputElement emailTextField;
DefaultSigninView(SigninPresenter presenter) : super(presenter);
// Lots of code...
}
这个想法是定义“ View ”和“演示者”的层次结构,其中最终是
DefaultSigninView
将与 DefaultSigninPresenter
相关(双向) .但我在
DefaultSigninView
中收到编译器警告的构造函数,提示我对 super(presenter)
的调用:Missing inherited member 'AbstractView.presenter'
为什么它不能“看到”我正在传递的演示者?父构造函数 (
AbstractView
) 采用 AbstractPresenter
...
最佳答案
这是因为 SigninView 并没有实现 AbstractView 的所有成员。与您的问题相同的情况:Dart inheritance and super constructor
您不是在扩展 AbstractView 而是在实现它。这意味着您必须为 AbstractPresenter presenter
实现 getter/setter。 .如果您只实现类,则不会继承属性。
来自 Dart language spec :
A class does not inherit members from its superinterfaces.
关于inheritance - Dart:继承和 super 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20885176/