09/01/27 18:19:29
Enumの初期化について質問です。ネイティブライブラリを読み込んで、
そこから得られる値をJavaの定数にマッピングするクラスなのですが、
初めはこんな感じで実装していました。
public class TestConst {
static { System.loadLibrary("libNativeHoge");}
public static final int A = NativeHoge.getA();
public static final int B = NativeHoge.getB(); ...
次にオシャレにEnumで実装しようとすると、static{}句をEnumの定義に
含めることが出来ないために怒られます。
public enum TestEnum {
static { System.loadLibrary("libNativeHoge");} // 文法エラー
A(NativeHoge.getA()), B(NativeHoge.getB()), ...
private final int nativeVal;
TestEnum(int nativeVal) {this.nativeVal = nativeVal;} ...
さらに、このEnumクラスをユーティリティクラスで包んで、そちらに
static{}句を移すとコンパイルは通るもののTestEnumの初期化前
にstatic{}句が呼ばれません。
public class TestUtil{
static { System.loadLibrary("libNativeHoge");} // 切ないことに、呼ばれない
public static enum TestEnum {...
Enumの初期化前に確実にある処理(上記例ではSystem.loadLibrary)
を実行する方法は何か無いでしょうか?