2012-05-01 25 views
3

有一種情況,我有接口X,它已經用我的數千個類實現。現在我想在該接口X中添加新方法。那麼如何以最小的方式進行更改以解決所有類中的方法被覆蓋的問題接口由數千個類實現,所以如果接口發生變化,那麼如何減少它

+5

該方法對所有類通用嗎?如果是這樣,也許'抽象類'比它更好'接口'。如果不是 - 你要這麼寫這些方法... – amit

+1

@amit請您的評論的答案,這樣我可以給予好評吧:) – MattDavey

+0

等待的Java 8擴展方法:) 的http:// MediaNetwork系統。 oracle.com/video/player/1113272518001 –

回答

7

如果方法實現對所有類都通用,那麼可能是一個abstract class是更好然後interface它。

如果不是 - 你要這麼寫這些方法。


(*)它最初是一個評論,但我被要求把它作爲一個答案。

2
  1. 如果你的新方法不會使該接口的所有實現感,不添加的地方 - 使該延伸的新界面你原來一個
  2. 如果有,應該是所有的默認實現你一千類 - 改變你的接口抽象CLAS
0
從其他建議

除了(使其abstractextendinterface)有一個另外的選擇:

使接口的所有實現者都擴展一個基類。這樣,當你方法添加到您interface只需要默認行爲添加到基類和類特定的行爲,(希望)短短的實施者。

0

如果你不介意任何操作在所有的類此方法的實現,並已超過所有執行類的控制,這裏是用的IntelliJ做3個步驟,而不去每一個非常哈克的方式類:

  1. 您的方法添加到界面
  2. 選擇的方法和調用Refactor->下推... - 您的方法聲明會出現在實現該接口的所有類,但至少在我的IntelliJ IDEA版本(11.0.2)他們將沒有實現,例如void doSomething();,所以選擇這個定義,並做了充分的項目查找&替換您的默認實現替換此字符串,例如,

    @Override無效DoSomething的(){}

  3. 加入你的方法重新對接。

+0

而如果OP沒有的IntelliJ他總能「Mavenize」他的項目來抽象從他的IDE:P從一個更嚴重一點,一個接口可從來沒有一次重新編碼因爲它可能不僅僅是你打破的代碼。您的解決方案假定此接口僅在單個項目中使用。 – thejartender

+0

這就是爲什麼我提到這個解決方案適用於OP如何控制所有實施類。 –

相關問題