假设我有这样的课程:
ParentA,ChildA1,ChildA2 ... ChildAn
ParentB,ChildB1,ChildB2 ... ChildBn
因此,每个ChildAi类都扩展了ParentA,每个ChildBi类都扩展了ParentB类。
在ChildAi课程中,我需要使用ChildBi类。例如:
public class ChildAi extends ParentA{
public ChildBi getChildB(...){
....some logic....
return childBi;
}
}
问题在于方法getChildB。如果我把这个方法放在ParentA中,我只能返回ParentB类,我将始终必须进行转换。如果我把这个方法放在ChildAi中,我将总是复制这个方法,至少是它的一些逻辑。我该如何解决?没有泛型可以解决这个问题吗?
答案 0 :(得分:1)
我认为仿制药是你的朋友。
将类ParentA定义为以下内容:
public class ParentA<T extends {
public abstract T getB();
}
现在每个子类将定义泛型类型如下:
public class ChildA1 extends ParentA<ChildB1> {
public ChildB1 getB() { return ...;}
}
就是这样。没有投射,也没有重复的代码。