Подтвердить что ты не робот

Является ли неправильной практикой вызов super() в классе, который ничего не расширяет?

Довольно часто я вижу людей, явно вызывающих super() в классе, который явно не расшифровывает ничего.

public class Foo
{
  public Foo()
  {
    super();

    //do other constructor stuff
  }
}

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

Должен ли я добавить это в наши стандарты кодирования/лучшую практику, и я должен подтянуть других разработчиков в своей команде, когда увижу, что они это делают? Это мой собственный медведь, но я не знаю, я просто придирчив или нет.

4b9b3361

Ответ 1

В то время как я - тот, у кого все для согласованности, я также против микроуправления каждым стилем. Наличие огромного списка соглашений о кодировании, особенно когда некоторые из них кажутся произвольными, является частью того, что препятствует людям следовать им. Я считаю, что руководящие принципы кодирования должны быть упорядочены до самых ценных практик, которые улучшают возможности. Насколько улучшена читаемость, ремонтопригодность, производительность и т.д., Задав эту практику?

В то время как моя личная практика заключается в том, чтобы не называть super() в таком случае, это не было достаточно серьезным, чтобы я включил его в руководство по кодированию или назвал его дефектом при просмотре другого кода программиста. Тем не менее я бы все же упомянул об этом и обсудил его в обзорах кода (а не как дефект, как вопрос стиля) в попытке привлечь больше инженеров, чтобы НЕ использовать вызов.

Ответ 2

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

Ответ 3

он будет неявно вызван, поэтому не нужно это делать

Ответ 4

Следует отметить, что:

  • Вызов super() совершенно бессмысленен, независимо от того, наследует ли класс что-либо или нет; он имеет смысл только, если вы не вызываете неявный конструктор базового класса
  • Вопрос должен быть "Делает ли что-то совершенно бессмысленную плохую практику?". Ответ очевиден - да!

Ответ 5

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

Eclipse специально генерирует этот супервызов (генерирует конструктор из суперкласса), однако у меня нет большого опыта работы с другими IDE. (Напишите свой опыт в комментариях.) Мой другой "любимый" по умолчанию код - это объявления методов интерфейсов: "публичный реферат", который является полностью избыточным.

Ответ 6

вызов

super() неявно добавляется JDeveloper. При написании собственного класса нет необходимости и полезности в этом.