代码重复与类型转换vs?

时间:2014-12-02 19:05:46

标签: java

假设我有这样的课程:
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中,我将总是复制这个方法,至少是它的一些逻辑。我该如何解决?没有泛型可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

我认为仿制药是你的朋友。

将类ParentA定义为以下内容:

public class ParentA<T extends {
   public abstract T getB();
}

现在每个子类将定义泛型类型如下:

public class ChildA1 extends ParentA<ChildB1> {
    public ChildB1 getB() { return ...;}
}

就是这样。没有投射,也没有重复的代码。