在函数中调用扩展类的构造函数

时间:2016-06-21 02:15:08

标签: function polymorphism

我有以下课程: -

Public abstract class A {
}

Public class B extends A {
    int a;
    B() {
        a=1;
    }
}

Public class C extends A {
    int a;
    C() {
        a=2;
    }
}

在一个功能中: -

if(given == 1) {
    List<B> listB = new ArrayList<>();
    for (int i=0;i<10;i++) {
        B b = new B();
        listB.add(b);
    }
    return listB;
}
else {
    List<C> listC = new ArrayList<>();
    for (int i=0;i<10;i++) {
        C c = new C();
        listC.add(c);
    }
    return listC;
}

正如您所看到的,我正在重复做同样的事情。有没有办法为此编写函数以避免使用某些多态性重复编码? 这里显示的类是简化的。

1 个答案:

答案 0 :(得分:0)

您可以使用工厂方法:

List<A> list = new ArrayList<>();
for (int i=0; i<10; i++){
   list.add(A.createInstance(given));
}
return list;

// in class A
static A createInstance(int given){
   switch(given){
      case 1: return new B();
      case 2: return new C();
   }
   throw new IllegalArgumentException("don't give me "+given);
}