В чем причина PMD CallSuperInConstructor? - PullRequest
0 голосов
/ 07 февраля 2019

PMD определяет правило CallSuperInConstructor .Какова цель добавления вызова без аргумента к super() в конструкторе, когда это не требуется компилятору?

Я понимаю, что могу отключить правило или использовать @SuppressWarnings, чтобы заставить правило замолчать вкаждый класс.

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

1 Ответ

0 голосов
/ 07 февраля 2019

Если ваш класс

  • имеет множество перегруженных конструкторов
  • расширяет класс не-Object, который имеет множество перегруженных конструкторов

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

Пример, иллюстрирующий вышесказанное:

class Foo {
    final int x;
    Foo(int x) {
        this.x = x;
    }
    Foo() {
        this.x = 1;
    }
}

class Bar extends Foo {
    Bar(int x) {
    }
}

Вопрос - каково значение new Bar(10).x?

...