Общепринятым для служебных классов является предоставить им частный конструктор:
public final class UtilClass {
private UtilClass() {}
...
}
Но, к сожалению, некоторым инструментам не нравится этот частный конструктор. Они могут предупредить, что он никогда не вызывал внутри класса, что он не покрывается испытаниями, что блок не содержит комментариев и т.д.
Многие из этих предупреждений исчезают, если вы это сделаете:
public enum UtilClass {;
...
}
Мой вопрос: помимо бесконечной ненависти к будущим разработчикам, какие важные отличия между enum без значений и класса с частным конструктором в Java?
Обратите внимание, что я не спрашиваю Какое преимущество переименования Java в сравнении с классом с публичными статическими конечными полями?. Я не решаю, должен ли список вещей быть связкой констант или перечислением, я решаю между тем, чтобы положить кучу функций в класс, не содержащий конструктора, или перечисление без значения.
Также обратите внимание, что я на самом деле не хочу этого делать. Я просто хочу знать компромиссы как часть общего знания языка.
Например, использование перечисления загрязняет автозаполнение бесполезными методами, например UtilClass.values()
. Какие еще недостатки? Расквитаться?