Это плохая практика вызывать super () в классе, который ничего не расширяет? - PullRequest
14 голосов
/ 13 января 2011

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

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

    //do other constructor stuff
  }
}

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

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

Ответы [ 6 ]

19 голосов
/ 13 января 2011

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

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

9 голосов
/ 13 января 2011

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

6 голосов
/ 13 января 2011

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

3 голосов
/ 13 января 2011

Необходимо указать, что:

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

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

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

0 голосов
/ 07 октября 2016

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

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