これは説明が少し難しいですが、 と の 2 つのクラスがあるA
としB
ます。そのような要素を提供する各オブジェクトによって登録されるファクトリ オブジェクトA
のリストが含まれます。static
この例B
では、そのようなクラスであり、架空のFactory
実装を提供します。
クラスA:
public class A {
protected static Map<String, Factory> registered = new HashMap<String, Factory>();
protected static register(String name, Factory factory) {
registered.put(name, factory);
}
public A() {
// Do something with the factories we've registered
}
}
クラス B:
public class B {
static {
A.register("Foo", new Factory() {
public Object create() {
return new B();
}
});
}
public B() {
// Create a new instance of class B
}
}
私のプログラムでは、何らかの奇妙な理由で静的ブロックB
が呼び出されることはありません。そのため、工場とのやり取りを開始すると、A
登録されていないため、必要なことを実行できません。
それぞれの作成をFactory
直接移動してA
も、もちろん問題はありません。私はB
、コンパイラーが認識していないクラスからの明確な参照がないため、その間にリンクがA
ありB
、まったく気にしないという仮定の下で作業していB
ます。これを回避するためにできることはありますか? A
新しいファクトリを単に登録するよりもメンテナンスが難しくなるため、新しいファクトリを直接 に追加することは避けたいと思っていましたが、まったく機能しないことは明らかです。それでも、できれば意図したとおりに動作させたいと思っています。
関連する場合、私が使用している特定の JVM は Android JVM です。これは、その JVM が使用している最適化の副作用でしょうか?