Является ли неправильной практикой вызов super() в классе, который ничего не расширяет?
Довольно часто я вижу людей, явно вызывающих super()
в классе, который явно не расшифровывает ничего.
public class Foo
{
public Foo()
{
super();
//do other constructor stuff
}
}
Теперь я знаю, что это совершенно легально, и если его не указывать, вызов добавляется компилятором, но я по-прежнему считаю его плохой практикой. Всякий раз, когда я вижу это, я задаюсь вопросом, имеет ли программист некоторое недоразумение в наследовании и тот факт, что все классы неявно расширяют Object
.
Должен ли я добавить это в наши стандарты кодирования/лучшую практику, и я должен подтянуть других разработчиков в своей команде, когда увижу, что они это делают? Это мой собственный медведь, но я не знаю, я просто придирчив или нет.
Ответы
Ответ 1
В то время как я - тот, у кого все для согласованности, я также против микроуправления каждым стилем. Наличие огромного списка соглашений о кодировании, особенно когда некоторые из них кажутся произвольными, является частью того, что препятствует людям следовать им. Я считаю, что руководящие принципы кодирования должны быть упорядочены до самых ценных практик, которые улучшают возможности. Насколько улучшена читаемость, ремонтопригодность, производительность и т.д., Задав эту практику?
В то время как моя личная практика заключается в том, чтобы не называть super()
в таком случае, это не было достаточно серьезным, чтобы я включил его в руководство по кодированию или назвал его дефектом при просмотре другого кода программиста. Тем не менее я бы все же упомянул об этом и обсудил его в обзорах кода (а не как дефект, как вопрос стиля) в попытке привлечь больше инженеров, чтобы НЕ использовать вызов.
Ответ 2
Добавление кода, который не нужен, всегда является плохой практикой. Это сделает код менее читаемым, так как вам нужно будет остановиться и начать задаваться вопросом, почему эта строка кода добавлена, и если она действительно существует по какой-то причине.
Ответ 3
он будет неявно вызван, поэтому не нужно это делать
Ответ 4
Следует отметить, что:
- Вызов
super()
совершенно бессмысленен, независимо от того, наследует ли класс что-либо или нет; он имеет смысл только, если вы не вызываете неявный конструктор базового класса
- Вопрос должен быть "Делает ли что-то совершенно бессмысленную плохую практику?". Ответ очевиден - да!
Ответ 5
Явный вызов супер-конструктора часто добавляется генератором автоматического кода по умолчанию, поэтому он не всегда о плохой практике программистов. Или, может быть, плохая практика оставить, несомненно, глупый код, который есть.
Eclipse специально генерирует этот супервызов (генерирует конструктор из суперкласса), однако у меня нет большого опыта работы с другими IDE. (Напишите свой опыт в комментариях.) Мой другой "любимый" по умолчанию код - это объявления методов интерфейсов: "публичный реферат", который является полностью избыточным.
Ответ 6
вызов super() неявно добавляется JDeveloper.
При написании собственного класса нет необходимости и полезности в этом.