Как инициализировать окончательное поле в теле конструктора?

В основном, это то, что я пытаюсь сделать:

  ClassName
  {
    final OtherClass field;

    ClassName()
    {
      field = new OtherClass(this);
    }
  }

Ответ 1

Невозможно назначить конечное поле в теле конструктора. Конечное поле должно быть назначено перед телом конструктора, в списке инициализаторов или декларации:

ClassName
{
    final OtherClass field = new OtherClass(); // Here

    ClassName()
        : field = new OtherClass(); // or here 
    {

    }
}

Поскольку вы не можете использовать this в списке инициализаторов или в объявлении, вы не можете делать то, что вы планируете делать.