public final class Helpers{ private Helpers(){ } public static String veryHelpfullMethod(){ .... } }
Недавно заметил у коллеги в коде такой вариант:
public final class Helpers{ private Helpers(){ throw new AssertionError("Not for instantiation!"); } }
Взял себе на вооружение. И правда, с нынешним reflection-ом закрытый конструктор уже не гарантирует, что класс невозможно будет создать. А вот так -- final-класс, с единственным конструктором и выбросом исключения -- я уже не могу придумать способа (кроме byte-code-modification, конечно -- но против лома нет приема).
Блок -- это который Александр? "По вечерам над ресторанами..."? :)
ОтветитьУдалитьДавненько я не читал книжек по джаве -- все статьями перебиваюсь, да
Свежее веяние использовать Enum для синглтонов и утилитарных классов.
ОтветитьУдалитьВеяло, да -- но у меня как-то не прижилось. Есть у меня пунктик -- инструменты должны использоваться по назначению, и лишь в крайних случаях -- иначе. Убедить себя, что синглетон это частный случай перечислимого типа я еще могу. Но вот с классом утилит у меня самовнушение уже не проходит
ОтветитьУдалитьА зачем вообще запрещать создавать такие объекты, если состояния нет и все методы статические?
ОтветитьУдалитьИменно потому, что смысла в этом никакого нет, а значит попытка его создания это почти наверняка какая-то ошибка. А ошибки должны проявляться как можно раньше
ОтветитьУдалить