Недавно в репозитории проекта Amber появился коммит, который позволит писать инструкции кода выше вызовов this() и super() в конструкторах. Сейчас this() и super() обязательно должны быть первыми вызовами в конструкторах, что часто создаёт неудобства при написании кода, например, если необходимо сделать какую-то нетривиальную валидацию входных аргументов или просто вынести в переменные слишком длинные выражения:
public class TxtFile extends File { public TxtFile(String path) { if (!path.endsWith(".txt")) { throw new IllegalArgumentException("Not a txt file"); } super(path); } }
Кроме того, возможность писать код перед вызовом конструктора также сильно поможет при написании data-классов. При компиляции data-класса компилятор будет создавать конструктор по умолчанию, который не будет делать никакой другой работы кроме инициализации полей. Чтобы добавить в инициализацию класса какую-то более сложную логику, нужно будет объявить свой конструктор, в котором необходимо вызвать конструктор по умолчанию посредством ключевого слова default() (аналогично this() и super()).
Так как объект до вызова this() / super() / default() ещё неявляется проинициализированным, на код будут накладываться некоторые ограничения. Например, этот код не сможет использовать поля класса и нестатические методы.