私はいくつかのクラスを持っています。それらを紹介し、最後に私の質問をしてください:
複合関係にある 2 つのオブジェクトを含むコンテナー クラスがあります。
public class Container{
A a;
B b;
public someMethod(){
a.getC().myMethod(b);
}
}
A と B はスーパークラス (またはインターフェイス) であり、サブタイプは複合関係で保持される型にもなります。
A には、(インターフェイス) タイプ C のメンバーが含まれています。
public class A{
C c;
}
public interface C{
public void myMethod(B b);
}
public class D implements C{
public void myMethod(B b){
//This code will modify the state of object b, in class Container.
b.changeState();
}
}
public class E implements C{
public void myMethod(B b){
//This code will modify the state of object b, in class Container.
b.changeState();
}
}
私の問題は、オブジェクト b の状態を、コンテナー クラスで開始するメソッドから、最終的に階層のコードを呼び出すメソッドから、動的バインディングを介して myMethod() を呼び出すクラス D および E に変更したいことです。ポリモーフィズムを使用して正しいmyMethod()
(オブジェクトのタイプが D か E かに応じて) 実行するので、IF ステートメントを記述するのではなく、これを実行したいからです。
したがって、私の問題は、オブジェクトbのインスタンスをクラス階層を下ってmyMethodに継続的に渡すのは非常に悪いように思われるため、b固有のコードを実行してbの状態を変更できます。d と e (総称して c) から b を変更するために他にできることはありますか?
ジェネリックを使用せずにインターフェイスだけを使用してこれを機能させることができますが、ジェネリックを追加したときに型に問題があり、設計全体に欠陥があるかどうかを考え始めましたか?
編集:おそらくIFステートメントを使用するだけでこれを簡単に実行できますが、クラスDとEのポリモーフィズムを使用したエレガントなソリューションが必要でした.