Jscience の SystemOfUnits を拡張していくつかのカスタム ユニットを定義するクラスがあります。メソッド Unit.valueOf() への呼び出しが呼び出される前であっても、このクラスを JVM によってロードする必要があります。
クラスが JVM にロードされていない場合、以下の呼び出しはjava.text.ParseException: dz が認識されない (インデックス 0 の dz 内)として失敗します。
Unit.valueOf("dz");
-
public final class CustomUnits extends SystemOfUnits {
...
private static HashSet<Unit<?>> UNITS = new HashSet<Unit<?>>();
public static final Unit<Dimensionless> DOZEN = customUnits(Unit.ONE
.times(12));
public static final Unit<Dimensionless> PIECE = customUnits(DOZEN
.divide(12));
static {
UnitFormat.getInstance().label(CustomUnits.DOZEN, "dz");
UnitFormat.getInstance().label(CustomUnits.PIECE, "pcs");
}
@Override
public Set<Unit<?>> getUnits() {
return Collections.unmodifiableSet(UNITS);
}
....
}
また、このクラスは、他のメイン アプリケーションへの依存関係として利用できる共通の jar の一部になることも通知されます。Unit.valueOf() が呼び出される前に、このクラスをどこかで参照する必要があることをすべてのユーザーに通知したくありません。
カスタム クラスを含む jar が依存関係として読み込まれるときに、クラスを読み込むことができるオプションを探しています。
Spring Bean の初期化が役立つかどうか疑問に思います。