これについてクリーンなタイトルを思いついても、難しい課題です。Listで抽象ジェネリッククラスを定義する<?>メンバー
基本的な考え方は、「親」を参照するメンバーを持つ「子」アイテム用と、子オブジェクトを含む「親」リスト用に2つのスーパークラスを定義することです。 child-> parentとparent-> childからのリンクは対称です。親/子スーパークラスのそれぞれには、追加の機能を定義し実装するサブクラスがあります。親との子ペアには常にパラレルサブクラスがあります。つまり、親は子参照のみを含み、子は親を参照するだけで、サブタイプ間には「交差」はありません。
これはどのように表現できますか?私は数日間このことに固執しており、より創造的なのは、それが悪化すると、複数レベルのネストされたジェネリック型であることです。これは私がしたいことです:
abstract class ChildBase<T extends ChildBase<T>> {
ParentBase<T> parent;
}
abstract class ParentBase<T extends ChildBase<T>> {
LinkedList<T> childList;
}
class ChildSub extends ChildBase<ChildSub> {
// ... class specific stuff
}
class ParentSub extends ParentBase<ChildSub> {
// ... class specific stuff
}
これは混乱です。私はこれを行うのがはるかに簡単で、簡単な方法があると思うし、それはおそらく全く異なる方向にあるだろう。
なぜ 'T 'が' ChildBase'を拡張する必要があるのか知りたいですか?それらのクラスには、「ChildBase」である必要があるメソッドがいくつか存在するでしょうか?ノードの兄弟を取得することが一例です。そうでなければ構造を大幅に簡素化することができます。 – sprinter
@sprinterは、おそらくより良いデザインを提供するために、問題のドメインを深く理解する必要があると述べています。記述されたクラスのアプリケーションの詳細についてさらに検討してください。 – guilhermerama
継承の代わりにインターフェイスベースのソリューションを試してみましたか?個人的には、クラスをデカップリングするだけではなく、これらの問題の多くが解決しやすいことが分かりました。 – Acapulco