2013-08-22 54 views
0

我試圖讓一個遊戲的維護方法,我的朋友和我正在努力,基本上檢查的子彈是設置邊界之外,然後從一個ArrayList(活着)到另一個(死亡)。試圖編輯通過WIldcard傳遞ArrayLists

我們有許多ArrayLists,包含從Bullet_Enemy類擴展的不同類型的項目符號。

維護類如下(使用Java):

public void maintenance(ArrayList<? extends Bullet_Enemy> aliveList, ArrayList<? extends Bullet_Enemy> deadList) 
{ for(i = 0; i < aliveList.size(); i++) 
    { if(aliveList.get(i).[Position] [is] [outside Boundary]) 
      {  deadList.add(aliveList.get(i)); 
       aliveList.get(i).reset(); 
       aliveList.remove(i); 
      } 
     } 
} 

時遇到的問題是,在該行 「deadList.add(aliveList.get(I));」告訴我,有一個錯誤:

"The method add(capture#33-of ? extends Bullet_Enemy) in the type ArrayList<capture#33-of ? extends Bullet_Enemy> is not applicable for the arguments (capture#34-of ? extends Bullet_Enemy)" 

我真的不知道從哪裏甚至開始對這個問題 - 甚至什麼條件來搜索周圍的谷歌將是有益的,因爲有人會解釋爲什麼這個問題發生。

謝謝!

回答

0

問題是兩個?不能保證是相同的類型。

所以你可以有ArrayList<Bullet_Enemy_SubClass1>ArrayList<Bullet_Enemy_SubClass2>作爲你的參數,但顯然Bullet_Enemy_SubClass1Bullet_Enemy_SubClass2是不兼容的。

假設你很高興,他們必須是同一類型,你可以通過方法簽名解決這個問題:

public <T extends Bullet_Enemy> void maintenance(ArrayList<T> aliveList, 
               ArrayList<T> deadList) 

但似乎你真的要允許任何Bullet_Enemy類型的ArrayList小號(每一個這些不侷限於單一類型),在這種情況下,你應該使用ArrayList<Bullet_Enemy>

public void maintenance(ArrayList<Bullet_Enemy> aliveList, 
         ArrayList<Bullet_Enemy> deadList) 

這將仍然允許添加Bullet_Enemy_SubClass1Bullet_Enemy_SubClass2ArrayList個S,你就得投他們,如果你想使用的Bullet_Enemy_SubClass1Bullet_Enemy_SubClass2的方法,即:

((Bullet_Enemy_SubClass1)aliveList.get(0)).subClass1Method(); 

// cast not required if we want to use a method of Bullet_Enemy 
aliveList.get(0).bulletEnemyMethod(); 
+0

謝謝,完美無缺! 我最終使用第一種方法,因爲第二種方法基本上是我剛剛切換的(基本上我無法傳遞ArrayList ,因爲雖然Bullet_Enemy_Subclass1擴展了Bullet_Enemy,但Bullet_Enemy_Subclass1的ArrayList沒有擴展ArrayList Bullet_Enemy或者其他一些,現在一切都很好,謝謝! – B10HAzARD