Вы должны инициализировать окончательную переменную один раз и только один раз. Существует три способа сделать это для переменной экземпляра:
Вот пример всех трех:
public class X
{
private final int a;
private final int b;
private final int c = 10;
{
b = 20;
}
public X(final int val)
{
a = val;
}
}
В каждом случае код запускается один раз, когда вы вызываете new X(...)
, и нет способа вызвать какой-либо из них снова, что удовлетворяет требованию инициализации, происходящему один раз и только один раз на экземпляр.