Вы помещаете супер (), называют начало Ваших конструкторов?

Это - вопрос о стиле кодирования и методических рекомендациях:

Как объяснено в ответах на вопрос, ненужный для помещения супер () в конструкторе?, если Вы пишете конструктору для класса, который, как предполагается, использует конструктора (без аргументов) по умолчанию от суперкласса, можно звонить super() в начале Вашего конструктора:

public MyClass(int parm){
  super(); // leaving this out makes no difference
  // do stuff...
}

но можно также опустить вызов; компилятор будет в обоих случаях действовать, как будто супер () вызов были там.

Таким образом Вы помещаете вызов в своих конструкторов или нет?

С одной стороны, можно было бы обсудить тот включая super() делает вещи более явными. OTOH, мне всегда не нравится писать избыточный код, так лично я склонен пропускать его; я действительно однако регулярно вижу его в коде от других.

Каковы Ваши события? У Вас были проблемы с одной или другим подходом? У Вас есть инструкции по кодированию, которые предписывают один подход?

BTW: связанный вопрос (только для ссылки):

Существует ли причина явно кодировать конструктора по умолчанию, когда нет никаких других конструкторов?

7
задан Community 23 May 2017 в 12:22
поделиться

9 ответов

Я не пишу вызов super () по той же причине, по которой я не пишу ненужные преобразования:

Он добавляет шум в код, не предоставляя никакой дополнительной информации (ни для компилятора и разработчику, читающему мой код).

20
ответ дан 6 December 2019 в 05:38
поделиться

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

Я просто не вижу в этом необходимости.

4
ответ дан 6 December 2019 в 05:38
поделиться

Каковы ваши впечатления? Были ли у вас проблемы с тем или иным подходом?

Я никогда не вызывал конструктор по умолчанию (явный) и никогда не сталкивался с какими-либо проблемами

2
ответ дан 6 December 2019 в 05:38
поделиться

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

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

4
ответ дан 6 December 2019 в 05:38
поделиться

Преимущество: Любой, кто читает ваш код, знает, что вы действительно хотите вызвать конструктор по умолчанию, вы не оставили вызов по ошибке.

Недостаток: Вы загромождаете свой код неважной информацией.

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

1
ответ дан 6 December 2019 в 05:38
поделиться

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

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

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

Если это не сработает, и мне придется исходить из реализации, я думаю, не имеет значения, писать super () или нет, поскольку это случается очень редко;)

В общем, я считаю этот вопрос бессмысленным.

0
ответ дан 6 December 2019 в 05:38
поделиться

Я использую super () только тогда, когда конструктору super () требуются параметры.

2
ответ дан 6 December 2019 в 05:38
поделиться

На самом деле я использовал вызов super () , так как считаю его полезным помощником по запоминанию. Когда несколько месяцев назад я написал фрагмент кода и вернулся к нему, super () напоминает мне, когда я смотрю на конструктор, который класс, который я написал, наследуется от чего-то.

0
ответ дан 6 December 2019 в 05:38
поделиться

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

1
ответ дан 6 December 2019 в 05:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: