2012-09-21 26 views
3

更改應用程序中的界面的最佳做法是什麼?如果接口已經被許多Java類實現,那麼改變它的最好方法是什麼?你打算擴展到一個新班級嗎?你打算使用任何設計模式?或者你使用授權(我認爲沒有任何使用授權的方式)?你打算使用不贊成的註釋嗎?如何更改Java中的接口及其後果?

這是最好的解決方案嗎?

public interface interface1 
{ 
} 

public interface interface2 extends interface1 
{ 
public void newMethod() 
} 
+0

在Intellij IDEA中有一個名爲Type Migration的工具,正如我記得對於這種情況 – 4lex1v

回答

3

立即想到兩種方法。

  1. 在您的IDE中,使用重構工具來更改界面。更高級的IDE(Eclipse可以 - 我不知道其他的)可以立即重構任何已知的實現。這要求受影響的項目是開放的。
  2. 您的解決方案MyInterface2 extends MyInterface也被廣泛使用,因爲它不會破壞現有的實施者。

如果您的解決方案出現在代碼審計或審查中,我不會拒絕它 - 這很好,恕我直言。

+0

你也可以做一個'窮人的重構':改變接口,然後等待你的IDE標記所有現在破壞的實現。這也需要實施項目是開放的。過去我們已經完成了這個工作,我們需要實際看到(並審查)一個接口的所有實現。 – Faelkle

0

如果你自己的代碼,更改接口的最佳方法是修復所有引用 - 而不是圍繞離開過時的代碼。

+0

這是正確的,但代碼可能很大,並且您可能無法更改所有實現立即 – sheidaei

0

如果這個方法不是所有其他類實現的interface1都需要,那麼我認爲通過這樣做可以避免重大代碼更改。

然後,下一個問題,我們是否需要這個在interface2(或)只需要在所需的類中就足夠了?

如果您不想將此新方法定義爲contract,換言之,其他類不需要實現,那麼我甚至不會創建interface2

0

您可以使用設計模式。 可以使用抽象工廠或橋樑模式

+0

您能否提供此解決方案的示例代碼?我認爲使用Abstract Factory或Bridge模式不是一個好主意,但他們爲這個簡單的解決方案帶來了開銷,不是嗎? – sheidaei

相關問題