как генерировать конструкторы в затмении - PullRequest
11 голосов
/ 14 августа 2010

У меня есть класс A, а BM расширяет A. Теперь я хочу создать конструктор B, используя опцию генерации кода eclipse, которая принимает параметры и устанавливает значения всех полей B (я имею в виду, что она также должна устанавливать поля, унаследованные от A).

Есть ли какой-нибудь ярлык для генерации такого кода в Eclipse?

Ответы [ 3 ]

22 голосов
/ 14 августа 2010

Щелкните правой кнопкой мыши в редакторе и выберите «Источник -> Создать конструктор, используя поля». Вы можете выбрать супер конструктор для использования, а также выбрать переменные экземпляра для добавления в конструктор.

6 голосов
/ 14 августа 2010

Eclipse (3.5) не имеет встроенной опции для этого конкретного случая, но я бы в любом случае предложил, чтобы у вас был отдельный конструктор в суперклассе , который подкласс вызывает через super(...) вего конструктор.

Это было бы легче поддерживать.Если вы, например, добавили поле в суперкласс, вам также необходимо помнить об обновлении подкласса.

class A {
    int i;
    public A(int i) { this.i = i; }
}

class B extends A {
    int j;
    public B(int i, int j) {
        super(i);
        this.j = j;
    }
}
2 голосов
/ 15 августа 2010

Не существует автоматического способа сделать это, и я близок к мысли, что команда eclipse сделала это специально, так как это привело бы к плохому дизайну.

Создание класса - это инициализация объектов собственные поля только.Если вам нужно установить (инициализировать) поля в суперклассе, вызовите конструктор суперклассов, если вам нужно изменить поля суперкласса, вызовите методы получения и установки суперклассов.

Для меня плохой дизайн - инициализация полей суперкласса иможно легко избежать.

...