русский
Germany.ruForen → Архив Досок→ Programmierung

​Сделать красиво?

31.08.17 00:48
Re: ​Сделать красиво?
 
dymanoid знакомое лицо
dymanoid
in Antwort anly 31.08.17 00:00, Zuletzt geändert 31.08.17 00:59 (dymanoid)

Никакого противоречия. Преимущество ленивой инициализации полей - быстродействие. Поля инициализируются по мере необходимости. Инициализаторы полей по сути - простые операции, не связанные между собой. Недостаток недетерминированного вызова конструктора - это метод с логикой, а "фиг знает когда происходящая" логика опасна. Если ты в всё предусмотрел, то твой коллега не знает особенностей и засунет в существующий статический конструктор какой-нибудь код с побочными эффектами и гейзенбагами.

И недетерминированность тут всё же немного разная. Для поля она более-менее предсказуемая. Перед первым использованием конкретного поля оно будет инициализировано. А вот с конструктором уже сложнее - или какое-то поле используется, или объект класса (если класс не статический) создаётся. Намного больше "недетерминированности".

Можно, конечно, возразить, что и в инициализаторы полей легко запихать много логики, а в конструкторе просто по порядку поля инициализировать. Но это уже философские вопросы.


А если говорить в целом, то и статические конструкторы, и статические инициализаторы - зло. Надо избегать статических состояний всеми силами. Всякие синглтоны и иже с ними. Уж сколько копий поломано в борьбе с багами, которые не дебажатся и не репродуцируются на девелоперских машинах, а народ всё равно туда лезет.

 

Sprung zu