在Java中,有没有办法在超级构造函数运行之前初始化一个字段?
即使是我能想到的最丑陋的 hack 也会被编译器拒绝:
class Base
{
    Base(String someParameter)
    {
        System.out.println(this);
    }
}
class Derived extends Base
{
    private final int a;
    Derived(String someParameter)
    {
        super(hack(someParameter, a = getValueFromDataBase()));
    }
    private static String hack(String returnValue, int ignored)
    {
        return returnValue;
    }
    public String toString()
    {
        return "a has value " + a;
    }
}
注意:当我从继承切换到委托时,问题就消失了,但我仍然想知道。