2015-05-10 49 views
0

我正在爲我的問題尋找解決方案一段時間,但我無法找到針對我的問題的答案。 我有一個抽象的類A和擴展了類A的類B和C. A和B是具體的類。 A類實現了將被V和C繼承的函數。在這個函數中,我想創建B或C的新對象 - 問題是我不知道哪個對象是那個對象。創建未知類的對象

我該如何做到這一點?

public void colision(List<Organism> organisms) { 

    List<Organism> temp = new ArrayList<Organism>(organisms); 
    temp.remove(this); 

    for (Organizm organism : temp){ 
     if (this.location == organizm.getLocation()){ 
      if (this.getClass().equals(organism.getClass())){ 
         //here is what I need to figure out 
      } 
      else{ 
       ... 
       } 
      } 
     } 
    } 
} 
+1

請言傳你如何決定你想要哪一個類。 – chrylis

+3

向A中添加一個抽象方法'createNewInstance()'並在B和C中實現它。但是你應該在更高層次上告訴我們你想要達到什麼,因爲this.getClass()。equals organism.getClass())'是一種設計氣味。 –

回答

5

使用Class<T>.newInstance()例如爲: organism.getClass().newInstance()。 爲了做到這一點,您需要在類定義中使用默認構造函數,否則您需要查找構造函數 - 例如: Constructor constructor = organism.getClass().getDeclaredConstructor(parameterTypes...);然後像constructor.newInstance(arguments...);一樣使用它。

+0

使用'organism.getClass()。getConstructor()。newInstance()'獲取更多信息異常。 – Radiodef

0

也許你可以有一個抽象方法的getInstance()在A,然後同時具有B和C實施該方法