Я хочу создать вспомогательный класс, который имеет дело с форматированием (т.е. имеет методы для удаления знаков препинания и преобразования между типами, а также для переформатирования имен и т.д.). Это не похоже, что ему понадобятся какие-либо поля - единственная его цель - получить переданные вещи для преобразования и возврата их, переформатированные. Неплохая практика - оставить конструктора? Если да, то что должен делать мой конструктор? Я смотрел эту ссылку и заметил, что в классе, который он описывает, отсутствует конструктор.
Java - неужели у плохой практики не есть конструктор класса?
Ответ 1
Неплохо ли использовать конструктор?
Да - поскольку если вы не укажете каких-либо конструкторов, компилятор Java предоставит вам конструктор с той же видимостью, что и сам класс.
Предполагая, что все ваши методы статичны, что кажется вероятным, если вы не хотите полиморфизма, вы должны сделать свой класс final
и дать ему конструктор private
, чтобы другие разработчики случайно не создали экземпляр вашего класса, когда это было бы бессмысленно. Когда вы думаете об API, в любое время, когда я могу удалить способность разработчиков делать что-то глупое, я делаю так:)
Так что-то вроде:
public final class Helpers {
private Helpers() {
}
public static String formatDate(Date date) {
// etc
}
}
Обратите внимание, что, выбирая полиморфизм из уравнения, вы также удаляете возможность изменить это поведение для тестов и т.д. Это может быть хорошо - я не верю в "никакой статики, когда-либо", но это стоит рассмотреть.
Ответ 2
Любой класс, который имеет все методы, которые не имеют или не нуждается в каком-либо состоянии, может уменьшить видимость конструктора, сделав его конструктивным.
Пример класс java.lang.Math в Java.
Поскольку java.lang.Math
имеет все статические методы, которые выполняют аналогичную работу, как ваш класс, они объявили конструктор как private
, так что никто не может случайно создать экземпляр этого класса.
/**
* Don't let anyone instantiate this class.
*/
private Math() {}
Ответ 3
Неплохая практика. но пример, который вы указали, не имеет каких-либо переменных-членов, которые могут использоваться в контексте объекта. В таких ситуациях лучше всего иметь статические методы, потому что тогда вам не нужно выделять память для создания объектов класса перед вызовом методов.
Ответ 4
Компилятор будет генерировать конструктор по умолчанию (без параметров) для вас. Если ваш класс не имеет состояния и не расширяет класс, который требует инициализации, вы можете разрешить его без объявления явного конструктора
Ответ 5
нет смысла оставлять конструктор, поскольку в вашем классе нет переменных экземпляра!
Конструкторыпредназначены для инициализации переменных экземпляра!
если вы пропустите конструктор, компилятор в любом случае вставляет конструктор по умолчанию, который достаточно справедлив!
Ответ 6
Обычно это хорошая практика кодирования для определения вашего конструктора в классе, хотя каждый класс имеет конструктор по умолчанию.
Но если у вас нет особой необходимости использовать конструктор с генератором или создать какой-либо одноэлементный шаблон, вы можете удалить конструктор.
Если вы используете статические методы в своем случае, вам также не нужно определять конструктор, так как вам не нужен объект этого класса.