(This問題是與我相似,但我認爲他們是足夠的不同,我可以創造一個新的)。獲取子類的實例
基本上在我小的3D遊戲我所有的實體是由許多不同的組件,一個用於紋理,一個用於移動等,這些子組件從界面「組件」繼承。到目前爲止,我已經使用過這種方法;
public MovementComponent getMovementComponent() {
for (Component c : components) {
if (c instanceof MovementComponent)
return (MovementComponent) c;
}
return null;
}
獲取某個組件的實例。但是現在我希望將其更改爲更通用的方法,可以從我的組件列表中獲取任何類型的組件。我測試了這樣的事情;
public Component getComponentType(Class component) {
for (Component c : components) {
if (c.getClass() == component)
return c.getClass().cast(c);
}
return null;
}
但是,即使我把結果這總是返回界面的「」「實例」,「」,從來沒有一個子組件的實例,這意味着我仍然有它轉換爲相應的類型。基本上我希望有一種方法可以:
- 迭代通過集合。
- 找到一個特定的子類。
- 返回該子類的實例。
我覺得我在這裏的正確軌道,但我無法得到它的工作。感謝您的迴應和反饋。
工程很棒。但是Eclipse給了我一個警告,說這是一個未經檢查的轉換 - 這是什麼意思,這是我應該處理的事情(如果是這樣,怎麼辦?取消警告?)? – Charanor
警告是由於不安全的類型轉換造成的。請參閱我的答案以獲得更好的解決方案 - 方法標頭相同,但使用「cast」方法完成演員。 – Marwin
@Charanor未檢查轉換警告顯示,因爲編譯器不知道你執行==檢查。但既然你這樣做,鑄造是絕對安全的,你可以忽略它@SupressWarning(「未選中」)方法註釋 – AdamSkywalker