2011-07-21 115 views
2

我有一個API的Java接口包含一個方法:更改Java界面後,客戶端是否必須重新編譯?

public interface MyInterface 
{ 
    public void foo(); 
} 

如果我添加一個方法,該接口是這樣的:

public interface MyInterface 
{ 
    public void foo(); 
    public void bar(); 
} 

不要使用API​​客戶端需要重新編譯或他們是否可以按原樣使用新的JAR,因爲我沒有更改簽名或現有方法或刪除方法?

+0

我認爲運行時類驗證程序會破壞這一點,因爲聲稱實現接口的現有類不會... – antlersoft

回答

3

簡答:可以使用新的API而不用重新編譯。

這是一個LINK,它可以幫助您瞭解Java如何運行字節碼以及它如何進行動態鏈接。

+0

如果庫的客戶端具有實現更改的接口的類,那麼該怎麼辦? – antlersoft

+0

@BoltClock:op提到他/她正在**使用**接口,而不是**實現**它。 –

+0

@ BoltClock2如果客戶端沒有改變,那麼他們將永遠不會調用未實現的方法。因此沒有問題。 – emory

1

這取決於。

如果客戶端要實現該接口,客戶端將不僅要重新編譯,但他們必須首先執行新的方法在其實現類(ES)

如果客戶打算只使用接口(作爲在系統一側創建的對象的引用)客戶端不必重新編譯。

1

如果添加一個方法,如果方法從未使用過,則實現者不需要重新編譯。你爲什麼要這樣做?如果您正在實施第三方界面,例如添加JDBC或JMS和方法,既不實現也不調用,您不需要重新編譯。

如果方法沒有超載,調用者不需要重新編譯。但是,如果方法被重載,調用者可能需要重新編譯,因爲它可能使用不同的方法調用。

interface Methods { 
    void method(double d); 
    // adding a method 
    void method(int i); 
} 

// calling code 
Method methods = ... 
methods.method(1); 

無需重新編譯,主叫方將繼續調用第一種方法,但是重新編譯後,調用者將調用第二種方法。

如果你刪除了一個沒有被調用的方法,這也可以。

重命名方法與刪除舊方法並添加新方法相同。

如果更改參數類型或所用方法的返回類型,則需要重新編譯。

相關問題