Javaでは、スーパーコンストラクターが実行される前にフィールドを初期化する方法はありますか?
私が思いつく最も醜いハックでさえ、コンパイラーによって拒否されます。
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;
}
}
注: 継承から委任に切り替えたときに問題はなくなりましたが、それでも知りたいです。