2013-04-03 46 views
0

情況:訪問具體方法一類的「類型」,集合中

  • 我有幾種方法的抽象類:
  • 我有延長上述
  • 類的幾個子類
  • 我有一個集合<MyAbstractClass>集合充滿了我的主類中的子類的新對象
  • 我有一個獨特的方法之一,我希望執行一個覆蓋我通常調用的方法的子類。

即如果條件爲,而不是通常collection.get(i).method();其中i是索引真,執行collection.get(i).specificMethod();

任何人都可以點我到正確的主題,進一步研究?另外,對我的情況有一點洞察力會產生奇蹟。

+0

重新考慮你的方法。在抽象類中創建一個方法,例如'specificActions()'並在每個子類中實現它。 – Keppil

回答

1

這聽起來像你想instanceof

for (AbstractThing thing : yourCollection) { 
    if (thing instanceof SubclassWithSpecialMethod) { 
     ((SubclassWithSpecialMethod)thing).specialMethod(); 
    } 
    else { 
     thing.method(); 
    } 
} 

雖然也有instanceof完全合法的用途,如果你發現你使用它(特別是如果你使用了很多),有時指最好退一步看看更大的圖片,看看是否有某種方式可以重新組織,以免不這樣做。

在這種情況下,例如,也許抽象類可以有method,然後在出現的特殊行爲的子類可以覆蓋method與特殊行爲,所以呼叫者只需撥打method和多態性踢給它當你處理特定的子類時的特殊行爲。

+0

你會詳細說明爲什麼在這種情況下使用instanceOf會是一個不明智的選擇嗎?看起來對我來說聽起來很完美 – TheJackal

+0

@TheJackal:我不是說它不是。正如我所說的,'instanceof'完全合法的用途,這可能就是其中之一。這完全取決於更大的背景。 –

+0

感謝T.J的洞察力 – TheJackal

0

檢查條件method(),如果符合,請從那裏自行撥打specificMethod()。根據你的描述,這隻適用於某些子類。

如果您正在檢查外部條件,請將標誌傳遞給method()以指示是否應該調用同一個實例的specificMethod()

相關問題