我有很多课程,请允许我介绍它们,然后在最后问我的问题:
我有一个容器类,其中包含复合关系中的两个对象:
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 的状态从容器类中开始的方法修改为类 D 和 E——通过动态绑定调用 myMethod(),该方法最终调用层次结构中的代码。我想这样做是因为我将使用多态性来运行正确的myMethod()
(取决于对象的类型是 D 还是 E)并且我希望这样做,而不是编写 IF 语句。
所以我的问题是,将对象 b 的实例沿类层次结构向下传递给 myMethod 似乎非常糟糕,这样我就可以运行特定于 b 的代码来修改 b 的状态。我还能做些什么来从 d 和 e (统称为 c)修改 b 吗?
我可以只使用接口而不使用泛型来让它工作——但是当我添加泛型时,我遇到了类型问题,这让我开始思考我的整个设计是否有缺陷?
编辑:我可以通过使用 IF 语句轻松地做到这一点 - 但我想要一个使用 D 和 E 类的多态性的优雅解决方案。