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

Должен ли всегда иметь конструктор с нулевым аргументом в классе?

Должен ли каждый класс Java иметь конструктор с нулевым аргументом?

4b9b3361

Ответ 1

Нет

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

Хорошим примером является java.awt.Color класс, все аргументы которого указаны.

Ответ 2

Нет, нет смысла всегда создавать конструкторы нулевых аргументов, следующие сценарии являются примерами, когда имеет смысл предоставить конструктор по крайней мере a-some-argument-constructor

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

Случаи, в которых вы хотите иметь конструктор нулевого аргумента:

  • Вы хотите выполнить спецификацию JavaBeans (имеет смысл для простых объектов данных).
  • Все поля могут быть инициализированы с использованием точных значений по умолчанию.
  • Вы хотите использовать инфраструктуру, которая ему нужна.

Один из ошибочных аргументов для конструктора с нулевым аргументом, на мой взгляд, является длинным списком аргументов. Для этого есть более эффективные решения, чем принятие инициализации объекта, который не находится в безопасном состоянии после создания:

  • Использование шаблона Builder.
  • Предоставлять специализированные объекты контейнера для настройки экземпляра через конструктор.
  • Предоставить несколько конструкторов, где базовые аргументы каждого из них являются требуемыми параметрами, которые не могут быть назначены по умолчанию.

Ответ 3

Как уже отмечал Энди Томас-Крамер, это даже невозможно:

class NeedsToBeImmutable {
    // For a class to be immutable, its reachable state
    // MUST be reached through a final field
    private final String stuff;

    //!!Compile error!!
    public NeedsToBeImmutable(){}

    public NeedsToBeImmutable(String stuff){
    this.stuff = stuff;
    }
    //getters...
}

Ответ 4

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