有一種情況,我有接口X,它已經用我的數千個類實現。現在我想在該接口X中添加新方法。那麼如何以最小的方式進行更改以解決所有類中的方法被覆蓋的問題接口由數千個類實現,所以如果接口發生變化,那麼如何減少它
回答
如果方法實現對所有類都通用,那麼可能是一個abstract class
是更好然後interface
它。
如果不是 - 你要這麼寫這些方法。
(*)它最初是一個評論,但我被要求把它作爲一個答案。
- 如果你的新方法不會使該接口的所有實現感,不添加的地方 - 使該延伸的新界面你原來一個
- 如果有,應該是所有的默認實現你一千類 - 改變你的接口抽象CLAS
除了(使其abstract
或extend
的interface
)有一個另外的選擇:
使接口的所有實現者都擴展一個基類。這樣,當你方法添加到您interface
只需要默認行爲添加到基類和類特定的行爲,(希望)短短的實施者。
如果你不介意任何操作在所有的類此方法的實現,並已超過所有執行類的控制,這裏是用的IntelliJ做3個步驟,而不去每一個非常哈克的方式類:
- 您的方法添加到界面
選擇的方法和調用Refactor->下推... - 您的方法聲明會出現在實現該接口的所有類,但至少在我的IntelliJ IDEA版本(11.0.2)他們將沒有實現,例如
void doSomething();
,所以選擇這個定義,並做了充分的項目查找&替換您的默認實現替換此字符串,例如,@Override無效DoSomething的(){}
加入你的方法重新對接。
而如果OP沒有的IntelliJ他總能「Mavenize」他的項目來抽象從他的IDE:P從一個更嚴重一點,一個接口可從來沒有一次重新編碼因爲它可能不僅僅是你打破的代碼。您的解決方案假定此接口僅在單個項目中使用。 – thejartender
這就是爲什麼我提到這個解決方案適用於OP如何控制所有實施類。 –
- 1. 如果接口無法實現一個接口,那麼如何的接口實現了機器人
- 2. 如果接口是由類實現的,接口是否會創建對象?
- 3. 類設計:類實現接口實現另一個接口
- 4. 類,它實現了兩個接口
- 5. 一個接口類可以由多個類實現嗎?
- 6. C++ 11:它的gc接口是什麼,以及如何實現?
- 7. 實現接口到一個類:接口到接口
- 8. 如果一個類實現了一個接口,並被分配給一個具有該接口類型的變量,那麼該對象的類型是什麼?
- 9. 一個類可以在PHP中實現多少個接口?
- 10. 一個類文件可以實現多少個接口
- 11. 當實現父接口聲明一個嵌套接口時會發生什麼
- 12. 實現接口嚮導 - 如何找到接口的「類型庫」?
- 13. 如何檢索父接口的實現類/接口?
- 14. 如何實現與接口
- 15. 如何實現IEditableCollectionView接口
- 16. 如何實現Zope接口?
- 17. 如何實現WritableComparable接口?
- 18. 如何實現Iterable接口?
- 19. 如何在另一個接口中實現一個接口
- 20. 如何識別實現接口的類?
- 21. 如何在java中實現接口類
- 22. 免費接口如何實現類?
- 23. 如果底層實現是一個結構,那麼接口類型的變量是否充當值類型?
- 24. 如何以TDD方式實現接口
- 25. 如何正確加載實現參數化接口的類?
- 26. 實例化實現通用接口實例的所有類
- 27. 允許實現多少個接口?
- 28. Java - 接口,實例化一個接口?
- 29. 如何實現定義另一個接口元素的接口
- 30. 如何在派生類或通過部分類實現接口?
該方法對所有類通用嗎?如果是這樣,也許'抽象類'比它更好'接口'。如果不是 - 你要這麼寫這些方法... – amit
@amit請您的評論的答案,這樣我可以給予好評吧:) – MattDavey
等待的Java 8擴展方法:) 的http:// MediaNetwork系統。 oracle.com/video/player/1113272518001 –