【问题标题】:Dart: inheritance and super constructorDart:继承和超级构造函数
【发布时间】:2014-01-02 14:31:40
【问题描述】:

我的 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...
}

这个想法是定义“视图”和“演示者”的层次结构,最终DefaultSigninView 将与DefaultSigninPresenter 相关(双向)。

但我在DefaultSigninView 的构造函数中收到编译器警告,抱怨我对super(presenter) 的调用:

缺少继承的成员“AbstractView.presenter”

为什么它不能“看到”我正在传递它的演示者?父构造函数 (AbstractView) 采用 AbstractPresenter...

【问题讨论】:

    标签: inheritance dart mvp multiple-inheritance super


    【解决方案1】:

    这是因为 SigninView 没有实现 AbstractView 的所有成员。与您的问题相同的情况:Dart inheritance and super constructor

    您不是在扩展 AbstractView 而是在实现它。这意味着您必须为AbstractPresenter presenter 实现getter/setter。如果只实现类,则不会继承属性。

    来自Dart language spec

    类不从其超接口继承成员。

    【讨论】:

    • 感谢 @Matt B (+1) - 但是如果我将 abstract class SigninView extends AbstractView 更改为 abstract class SigninView implements AbstractView 我会收到一个新错误:“预期有 0​​ 个位置参数,但找到了 1 个”。想法?再次感谢!
    • 我的猜测是你用一个参数调用一些东西,尽管它不需要一个。 (可以是超级构造函数调用,也可以是静态函数)。
    猜你喜欢
    • 2014-09-02
    • 2017-04-05
    • 2021-11-15
    • 1970-01-01
    • 2012-01-31
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    相关资源
    最近更新 更多