тем, что нельзя классу быть одновременно final abstract,
в прочем делать такие классы — это странное желание на мой вкус,
а вот описанный паттерн (финальный класс+приватный конструктор) — вполне имеет право на существование
final избыточно, если есть все конструкторы приватные.
еще в Вашем варианте можно будет создать экземпляр класса через конструктор по умолчанию, который добавит компилятор
У меня не дословный перевод, а мое понимание написанного (сравните с оригиналом при желании). Думаю, что людям будет приятно прочитать про подобные вещи на русском языке, поскольку не все владеют английским и не все знают про книгу Блоха.
Да, сам так делаю.
Правда, если задуматься — непонятно достоин ли этот мелкий момент внимания.
Всё равно у утилити-классе все методы статические и если кто-то захочет создать экземпляр подобного класса — да пожалуйста, какая разница. Но только никто не захочет потому что тупо незачем.
Многие начинающие программисты, которые еще слабо владеют предметом ООП, наследуют от утилитных классов (встречал при доработке кода в подобных проектах).
С точки зрения удобочитаемости лучше помимо приватного конструктора объявлять класс final. Современные IDE по этому модификатору помечают класс специальной иконкой, что позволяет наглядно выделять подобные классы в списке. Также это является дополнительным документированием направления мыслей разработчика.
Кстати, если уж совсем копнуть вглубь, то в Java (по крайней мере в 1.5.* версиях Sun Hotspot) можно наследоваться от final класса в каком-то смысле ;).
www.wasm.ru/article.php?article=unsjav1
Disclaimer: все это не для того, чтобы использовать, а просто пример того, что в принципе удалять зубы через задний проход наследоваться от final-class иногда возможно.
Abstract и Final class одновременно в языке программирования Java?!