Бакки Бугвин (bukky_boogwin) wrote,
Бакки Бугвин
bukky_boogwin

Фишка, которую я хочу в синтаксисе Java: абстрактные константы. Устроено могло бы быть так. В интерфейсе или абстрактном суперклассе - объявление без инициализации:

abstract final Type CONST;

В реализации / подклассе - обязательная (если это не абстрактный класс) инциализация:

@Override
final Type CONST = value;

Такая штука была бы полезна, например, в случае, когда имеется много функционально близких классов, в каждом из которых используется с одной и той же целью константа, имеющая для каждого конкретного класса свое значение (банальный пример: есть множество окон, содержащих вкладки; число вкладок постоянно для окна каждого типа и разное для разных типов - где-то две вкладки, где-то пять, где-то одна... вот число вкладок и хорошо было бы сделать такой константой). Сейчас в таких случаях приходится либо объявлять эту константу только в подклассах (это не позволяет использовать ее в суперклассе, да и просто противоречит принципу наследования), либо объявлять ее в суперклассе не как константу, а инициализировать в подклассах либо в теле использующего его метода, либо отдельным блоком кода, исполняемым при загрузке кода (некрасиво; неэкономно - нельзя сделать неизменяемое значение константой; фактически создает проблему "магических чисел"; главное: оставляет возможность при наследовании забыть о необходимости инициализации, что особенно весело в случае, если речь о примитиве)
Проблем от введения такого синтаксиса придумать не могу. Догадываюсь, впрочем, что я не первый это придумал, так что, вероятно, они есть...

Tags: java, программирование
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 1 comment