Я всегда чувствовал, что в целом основная работа класса должна выполняться в его методах экземпляра, в то время как конструктор должен только переводить экземпляр в работоспособное начальное состояние.
Но я нахожу, что на практике бывают ситуации, когда представляется более целесообразным вкладывать в конструктор практически всю существующую работу.
Один пример: мне нужно извлечь некоторую информацию, относящуюся к СУБД, из базы данных. Мне показалось, что наиболее естественным способом является класс 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 только в качестве держателя значения), но было бы ужасно создавать класс только для возврата значений из одной функции .
Так что вы думаете? Есть ли проблемы с выполнением основной работы в конструкторе? Это "не-идиоматический" в Java? Или это приемлемая (хотя, возможно, необычная) практика?