Как сделать так, чтобы все классы, которые реализуют определенный интерфейс, имели одинаковый конструктор? - PullRequest
0 голосов
/ 28 сентября 2019

Это то, что я стремился сделать:

public interface Controller {
    default public Controller(Model model, View view) {
        this.model = model;
        this.view = view;
    }
}

Но, похоже, это не работает.Кажется, классы не могут успешно наследовать этот конструктор по умолчанию, потому что переменные-члены не допускаются в интерфейсе.

Есть ли способ достичь того, что я пытаюсь сделать?

Я хочу, чтобы все мои контроллеры имели этот конструктор.

Ответы [ 2 ]

0 голосов
/ 29 сентября 2019

Вместо интерфейса используйте абстрактный класс с конструктором, который вы хотите наследовать.

public abstract class Controller {
    protected Model model;
    protected View view;
    public Controller(Model model, View view) {
        this.model = model;
        this.view = view;
    }
}
0 голосов
/ 29 сентября 2019

Интерфейс Java не допускает конструкторы внутри своего определения, только объявление имен методов.Использование интерфейса позволяет другим классам (тем классам, которые используют ваш интерфейс) предоставлять код внутри этих методов, которые вы объявляете в своем интерфейсе.

public interface Controller {
    void setController(MyControllerVariable);
    MyControllerVariable getController();
    boolean isController(MyControllerVariable);
}

Обратите внимание, что в предыдущем коденет определения того, как и что делают методы.Вы должны реализовать определение кода внутри методов.Например:

public class YourClass implements Controller {
    MyControllerVariable mcv = new MyControllerVariable();

    public void setController(mcv) {
        // Do something interesting here
    }

    public Controller getController() {
        // Do something interesting here
    }

    public boolean isController(mcv) {
        // Do something interesting here
    }
}

Если вы хотите что-то сделать с Конструкторами, вы должны использовать Класс.Например:

public class Controller{
    Model model;
    View view;

    public Controller(Model model, View view) {
        this.model = model;
        this.view = view;
    }

}

Использование ключевого слова «default» в java нельзя использовать в конструкторах, поэтому не используйте его.Предыдущий код показывает, что вы хотите сделать.Поскольку у класса есть только один конструктор, это конструктор по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...