Code before this() / super()

Code before this() / super()

miniJUG

В конструкторах классов можно будет писать код перед this() и super().

Недавно в репозитории проекта Amber появился коммит, который позволит писать инструкции кода выше вызовов this() и super() в конструкторах. Сейчас this() или super() обязательно должны быть первыми вызовами в конструкторах, что часто создаёт неудобства при написании кода, например, если необходимо сделать какую-то нетривиальную валидацию входных аргументов или просто вынести в переменные слишком длинные выражения:

Кроме того, возможность писать код перед вызовом конструктора также сильно поможет при написании data-классов. При компиляции data-класса компилятор будет создавать конструктор по умолчанию, который не будет делать никакой другой работы кроме инициализации полей. Чтобы добавить в инициализацию класса какую-то более сложную логику, нужно будет объявить свой конструктор, в котором необходимо вызвать конструктор по умолчанию посредством ключевого слова default() (аналогично this() и super()).

Так как объект до вызова this() / super() / default() ещё неявляется проинициализированным, на код будут накладываться некоторые ограничения. Например, этот код не сможет использовать поля класса и нестатические методы.

Обсудить новость

Подписаться на канал в Telegram

Report Page