2016-06-21 179 views
0

我有以下類別: -調用構造函數

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

你可以有一個工廠方法:

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); 
}