「親と子」オブジェクトの概念を持つシステムで完全なタイプ セーフを実現するために、パラメーターを過剰に使用することに手を出していました。パラメータを書くのがとても醜いので、おそらくこのレベルのパラメータ化を維持するつもりはありません。ただし、概念的には次のようなものがあります。
ModelObject<BaseType extends ModelObject<BaseType, ChildType>, ChildType extends ModelObject<ChildType,?>>
{
abstract Set<ModelObject<?, BaseType>> getParents();
//other logic
}
これは単純化されたバージョンです。元のバージョンでは、親とベースと子を指定して、物事をより明確にし、さらに醜くしました。
私がこれらすべてを維持したと仮定すると、主な弱点は、子には 1 つのタイプの親しか許可されず、親ごとに 1 つのタイプの子しか許可されないことです。今はまったく役に立ちませんが、理論的には、3人以上の子供を持つことは理にかなっています.
インターフェイスを持つ2人の子供を許可できるので、次のようなものです
MyObject extends ModelObject<MyObject, ChildA> implements hasChild<childB>
しかし、「2人の子供を持つ、3人の子供を持つ」などのインターフェースをたくさん作りたくない限り、明らかにこれは2人の子供にしか機能しません。
潜在的な「子」のリストのいずれかに一致する子オブジェクトを作成できるように、任意の数の「子」パラメーターを何らかの形で作成できる汎用抽象クラスを作成する方法はありますか? 答えはノーだと思いますが、興味があります。この構造全体は、制限が厳しすぎて、すべてのタイプが飛び交う少し醜いので、おそらく処理されません。しかし、それができるかどうかを確認するために、楽しみのためにそれに手を出していました:)