抽象親クラスを拡張するいくつかの子クラスがあります。親クラスには、各子のインスタンスを保持する静的な ArrayList が必要です。可能であれば、親クラスのコードを変更せずに子クラスを追加できるようにしたいと考えています。
私が思いついた解決策の 1 つは、子クラスのそれぞれに、それ自体のインスタンスを ArrayList に追加する静的ブロックを与えることです。これに関する唯一の問題は、ブロックをロードして実行するために、各子に何らかの呼び出しを行う必要があることです。
abstract public class Parent {
protected static ArrayList<Parent> children = new ArrayList<Parent>();
}
public class ChildA extends Parent {
static {
children.add(new ChildA());
}
}
public class ChildB extends Parent {
static {
children.add(new ChildB());
}
}
これを回避する方法はありますか?クラスを呼び出さずにクラスをロードできますか? これを行うためのより良い方法はありますか?
編集: これは実際にはタイル ベースのゲーム用です。抽象的な「タイル」クラスと、それを拡張する任意の数のタイル タイプがあります。コードをあちこち変更することなく、ゲームに新しいタイルを簡単に追加できるようにしたいと考えています。これを行う方法についてより良いアイデアがある場合は、提案をお待ちしています。