2017-03-24 12 views
-1

Javaを使用して次のクラス設計を定義するにはどうすればよいですか?Genericsを使用してJavaクラスでクラス参照を定義する方法は?

class Test 
{ 
    private ClassA classA; 
    **Placeholder for class reference** 
} 

上記のプレースホルダでは、ClassBまたはClassCのインスタンスを渡します。どのように変数を宣言するのですか?

class ClassB 
{   
    List<ClassD> classDList; 
} 

class ClassC 
{ 
    List<ClassE> classEList; 
} 

class ClassD 
{ 
    String string; 
    List<ClassE> classEList; 
} 

class ClassE 
{ 
    String string; 
    List<ValueObject> valueObjectList; 
} 

上記のデザインに他にも優れたソリューションがある場合は、私に提案してください。

+0

ClassBとClassDBをClassBに拡張しますか? – muzzlator

+1

なぜこれを行う必要がありますか? 'ClassCB'と' ClassDB'に共通するものがない場合、どうしてそれらを交換可能に使いたいのですか? – 4castle

+0

Javaに分離型の共用体型はありません。したがって、ClassBとClassCが共通のスーパータイプ(インタフェース?)を持っていない限り、そのことはできません。しかし、多くの図書館では ''型があるので、それを使うことができます: ' kaqqao

答えて

0

は、それはあなたが、「一般的なタイプとして」によって何を意味するか、完全に明確ではないですが、:ClassCBClassDB両方ClassBを拡張する場合は、ClassCBまたはClassDBのインスタンスは、タイプClassBの変数に代入されています。

class ClassB {} 
class ClassCB extends ClassB {} 
class ClassDB extends ClassB {} 

この質問にはジェネリックとは関係ありません。

0
class Test<A,B> 
{ 
    private A classA; 
    // A common type for ClassCB and ClassDB 
    private B classB; 
} 
関連する問題