я всегда чувствовал, что в целом основная работа класса должна выполняться в его методах экземпляра, в то время как конструктор должен только привести экземпляр в пригодное для использования начальное состояние.
Но Я считаю, что на практике бывают ситуации, когда кажется более разумным поместить практически всю фактическую работу в конструктор.
Один пример: Мне нужно получить из базы данных некоторую информацию, относящуюся к СУБД. Мне показалось, что наиболее естественным способом было создать класс DBMSSpecInfo с конструктором:
public DBMSSpecInfo(java.sql.Connection conn) throws SQLException{
// ... retrieve info from DBMS
}
/** @returns max size of table in kiB */
public int getMaxTableSize() {//...}
/** @returns max size of index in kiB */
public int getMaxIndexSize() {//...}
/** @returns name of default schema */
public String getDefaultSchema() {//...}
Вы должны создать класс один раз, конструктор будет извлекать все данные, а затем вы можете использовать различные геттеры для извлечения необходимой информации.
Конечно, я мог бы поместить этот метод в другое место и использовать только DBMSSpecInfo
для возвращаемого значения (по сути, используя DBMSSpecInfo только в качестве держателя значения), но кажется уродливым создавать класс только для возврата значений из одного функция
Так что ты думаешь? Есть ли проблемы с выполнением основной работы в конструкторе? Это "неидиоматично" в Яве? Или это приемлемая (хотя, возможно, редкая) практика?