回答
有沒有辦法添加到Java接口的新方法,而無需修改正在實施它的類。
號
條件是,如果還包括不修改直接實現接口的很多類的情況,您已獲得我不應該引入新的接口
的不可能的任務
這就是爲什麼接口通常伴隨着抽象的Adapter
類,它們以無所謂的方式實現所有的方法。然後,實現類擴展適配器而不是實現接口,因此如果您需要添加接口,則只需修改接口和適配器。
+1除了最後一段。我認爲使用帶有無所事事實施的「適配器」是一個非常糟糕的想法。界面是合同。在沒有實際執行合約要做的工作的情況下實施它的方法會打破合同。 –
然後,您將在'java.awt.event'中與所有適配器的作者爭論。隨意。 – EJP
我同意,只有一個警告。適配器對於那些人們經常實現接口但只對一個或兩個回調感興趣的聽衆很有用。 –
你想要做的事情根本不可能。除非(正如在評論中指出的那樣)您使用Java 8.您可以使用Java 8。
Java 8引入了默認或防禦方法的概念,允許您向接口添加方法並在該方法中提供該方法的默認實現界面。
http://zeroturnaround.com/rebellabs/java-8-explained-default-methods/
答案的其餘部分適用於Java的任何版本的前8:
的接口描述一個類的方法。如果向接口添加新方法,那麼實現接口的所有類都必須實現該方法。除非有一些碰運氣,否則你添加的方法已經存在於每一個實現類中,這是不可能的,不需要添加新的接口或者改變類。
如果你的接口是一個抽象類,那麼你可以添加一個存根方法,它什麼都不做,並且允許被覆蓋,但接口沒有可選方法的概念。
- 1. 如何將參數添加到由許多類繼承的方法
- 2. 直接調用模型添加方法
- 3. 爲什麼C++不允許向類中添加新的方法?
- 4. 沒有添加任何新方法的類圖類接口
- 5. 如何將斷點或自定義代碼添加到由許多子類實現的接口方法?
- 6. 是否添加了許多方法來降低性能?
- 7. 重寫許多類的許多方法中的一類
- 8. 在控制器上允許多種方法而不添加路由的最佳方式是什麼?
- 9. Ruby擴展Date類添加新方法
- 10. 向Array類添加新方法
- 11. 在JavaScript中爲類添加新方法?
- 12. 將新的SQL命令直接添加到LINQ設計類
- 13. 如何加速這個直方圖類?
- 14. 將新方法添加到列表<T>上方的對象是由
- 15. Excel中:通過添加多少線在垂直方向上這
- 16. 無法添加到QImage的直接QGridLayout
- 17. 這是處理此功能最直接的方法嗎?
- 18. nCover由於許多類庫
- 19. 方法load()定義Objective-C類的方法'load',這是不允許的Swift 1.2
- 20. 添加方法類的Node.js
- 21. 在許多類中實現新接口成員的最快方法?
- 22. 添加類直接派生ul元素
- 23. 許多選擇器和添加類
- 24. 覆蓋保存方法在許多添加列表到許多領域
- 25. 將方法添加到Rails :: Application子類是否可接受?
- 26. 許多具有相同方法的類或具有該方法且由其他類繼承的類?
- 27. 我應該將方法添加到繼承db.Model的類中,還是應該將這些類繼承爲新類?
- 28. Symfony2的路由:不允許的方法(允許:(方法})
- 29. 向Python Thread類添加新方法是否安全?
- 30. Python:是否可以向Tuple類添加新方法
在Java 1.8中添加了Defender/Default方法,這將允許您向接口添加新方法和默認實現。 – samlewis