Когда полезно использовать частный конструктор?

Возможный дубликат:
Какая польза от создания закрытого конструктора в классе?

Когда полезно использовать частный конструктор? А как насчет защищенного?


person Ali_IT    schedule 05.02.2013    source источник


Ответы (3)


это полезно, когда вы хотите предотвратить создание экземпляра объекта извне, например статические фабричные классы, синглтоны и т. д.

person mre    schedule 05.02.2013

Я могу придумать несколько вариантов использования private:

  • Предотвратить создание экземпляров извне (полностью статические классы или синглтоны)
  • Конструкторы по умолчанию иногда требуются для создания экземпляров ваших классов (например, Hibernate), но вы можете не захотеть делать их общедоступными.
  • Делегирование конструкторов

Совершенно надуманный пример последнего:

private MyClass(int a) {
    this.a = a}

public MyClass(int a, String B) {
    this(a);
    this.b = b;
}

public MyClass(int a, double c) {
    this(a);
    this.b = Double.toString(c);
}

Аналогичные рассуждения для protected, он просто расширяет немногих привилегированных до подклассов и соседей по пакету.

person sharakan    schedule 05.02.2013

Шаблон Singleton использует частный конструктор для управления созданием объекта. Другой вариант использования, с которым вы можете столкнуться, - это когда вы хотели бы иметь специальный конструктор, используемый в модульных тестах (если вы запускаете модульные тесты без фреймворков внедрения зависимостей), поэтому вы не будете делать его общедоступным, но пакет будет защищен и объявить модульный тест в такой же пакет.

person Bogdan    schedule 05.02.2013