我有以下课程: -
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;
}
正如您所看到的,我正在重复做同样的事情。有没有办法为此编写函数以避免使用某些多态性重复编码? 这里显示的类是简化的。
答案 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);
}