私は大量の生成された定数を保持するクラスを持っています:
public class Constants extends SomeBaseClass {
// init() is defined in some base class...
public static final XXX KEY1 = init(...);
public static final XXX KEY2 = init(...);
public static final XXX KEY3 = init(...);
// ...
public static final XXX KEY2000 = init(...);
}
生成された定数の数が非常に多い場合、静的初期化子が Java メソッド サイズの上限 (つまり > 64kb) よりも大きくなり、コンパイラ エラーが発生します。1 つの解決策は、メソッドに適合するように、64kb 未満のバイトコードを生成することが保証されているブロックに対して、いくつかの「ブロック初期化メソッド」を作成することです。
public class Constants extends SomeBaseClass {
public static XXX KEY1;
public static XXX KEY2;
public static XXX KEY3;
// ...
public static XXX KEY2000;
static {
initialise0001To1000();
initialise1001To2000();
}
private static void initialise0001To1000() {
KEY1 = init(...);
KEY2 = init(...);
KEY3 = init(...);
// ...
}
private static void initialise1001To2000() {
// ...
KEY2000 = init(...);
}
}
final
これの欠点は、静的初期化子で直接初期化されなくなったため、定数を として宣言できなくなったことです。
static final
私の質問は、定数を生成できる方法でそのコンパイラ/JVM の制限を回避するにはどうすればよいですか?