Можно ли написать конструктор, который ничего не делает? - PullRequest
9 голосов
/ 09 марта 2010

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

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

public Point() {
}

Ответы [ 13 ]

15 голосов
/ 09 марта 2010

Вам не нужно писать пустой contstructor; компилятор Java автоматически вставит один для вас (только если вы не определили другие конструкторы, которые принимают некоторые аргументы).

Так что это вполне нормально (и полезно в некоторых ситуациях), но это не обязательно.

4 голосов
/ 09 марта 2010

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

private Point() {}

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

4 голосов
/ 09 марта 2010
4 голосов
/ 09 марта 2010

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

3 голосов
/ 09 марта 2010

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

Но это действительно ваше дело.

1 голос
/ 09 марта 2010

Конструктор, который ничего не делает, безусловно, приемлем для языка, поскольку Java по умолчанию предоставляет его, если вы этого не сделаете ( JLS 8.8.9 ):

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

Существуют некоторые ограничения на то, когда именно конструктор по умолчанию может быть предоставлен автоматически, какой у него будет модификатор доступа и т. Д., И все это указано в JLS.

0 голосов
/ 19 сентября 2016

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

0 голосов
/ 09 марта 2010

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

Это похоже на то, если у вас есть оператор if, который содержит только 1 оператор. Вы должны пойти дальше и поставить вокруг него фигурные скобки, или просто оставить одно утверждение с отступом под if? Хорошо, если вы добавите больше операторов под этим, если позже и забудете скобки, у вас там логическая ошибка. Можно также пойти дальше и поставить скобки, или, другими словами, конструктор.

0 голосов
/ 09 марта 2010

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

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

0 голосов
/ 09 марта 2010

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

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