Я думал, сколько кода нужно поместить в конструкторы в Java? Я имею в виду, очень часто вы создаете вспомогательные методы, которые вы вызываете в конструкторе, но иногда возникают некоторые более длительные операции инициализации, например, для программы, которая читается из файла или пользовательских интерфейсов или других программ, в которых вы инициализировать только переменные экземпляра, в которых конструктор может получить больше времени (если вы не используете вспомогательные методы). У меня есть что-то в виду, что конструкторы должны быть короткими и краткими, не так ли? Есть ли исключения?
Сколько кода нужно добавить в конструктор?
Ответ 1
Если вы идете по принципам SOLID, у каждого класса должна быть одна причина для изменения (т.е. сделать одно). Поэтому конструктор обычно не читает файл, но у вас будет отдельный класс, который создает объекты из файла.
Ответ 2
Взгляните на этот вопрос SO. Несмотря на то, что другой для С++, понятия по-прежнему очень похожи.
Ответ 3
Достаточно немного, необходимое для завершения инициализации объекта.
Если вы можете говорить о части (5 строк - это моя рекомендация) вашего конструктора как кусок логики или конкретного процесса, лучше всего разделить его на отдельный метод для ясности и организационных целей.
Но каждому свое.
Ответ 4
Конструкторы должны быть достаточно длинными, но не более =)
Если вы определяете несколько перегруженных конструкторов, не дублируйте код; вместо этого консолидируйте функциональность в один из них для улучшения ясности и простоты обслуживания.
Ответ 5
Как сказал Кнут: "Преждевременная оптимизация - это корень всего зла".
Сколько вы должны положить в конвейер? Все, что вам нужно. Это "нетерпеливый" подход. Когда - и только когда - производительность становится проблемой, вы рассматриваете ее оптимизацию (к "ленивым" или "чрезмерным" подходам).
Ответ 6
Конструкторы должны создать минимальный, общий экземпляр вашего объекта. Как общий? Выберите те тесты, которые каждый экземпляр или объект, который наследует от класса, должен пройти, чтобы быть допустимым - даже если "действительный" означает только изящное изложение (запрограммированное сгенерированное исключение).
Википедия имеет хорошее описание:
http://en.wikipedia.org/wiki/Constructor_(computer_science)
Действительный объект - это цель конструктора, действительная необязательно полезная - это может быть сделано в методе инициализации.
Ответ 7
Моя обычная практика заключается в том, что если все конструктор должен сделать, это установить некоторые поля для объекта, он может быть сколь угодно длинным. Если он слишком длинный, это означает, что дизайн класса в любом случае сломан, или данные должны быть упакованы в некоторые более сложные структуры.
Если, с другой стороны, входные данные нуждаются в более сложной обработке перед инициализацией полей класса, я склонен дать конструктору обработанные данные и переместить обработку в статический метод factory.
Ответ 8
Возможно, ваш класс должен быть инициализирован в определенное состояние, прежде чем с ним можно будет сделать какую-либо полезную работу.
Рассмотрим это.
public class CustomerRecord
{
private Date dateOfBirth;
public CustomerRecord()
{
dateOfBirth = new Date();
}
public int getYearOfBirth()
{
Calendar calendar = Calendar.getInstance();
calendar.setTime(dateOfBirth);
return calendar.get(Calendar.YEAR);
}
}
Теперь, если вы не инициализируете член varioble dateOfBirth, любое последующее обращение getYearOfBirth() приведет к исключению NullPointerException.
Таким образом, минимальная инициализация, которая может включать
- Назначение значений.
- Вызов вспомогательных функций.
чтобы убедиться, что класс ведет себя корректно, когда он вызывается позже, - все, что нужно сделать.
Ответ 9
Конструктор похож на Мастера установки приложений, в котором вы выполняете только конфигурацию. Если Экземпляр готов принять любое (возможное) действие по себе, то Конструктор будет хорошо работать.