2009-11-08 170 views
1

的子類,我有以下接口聲明:聲明爲拋出異常的方法簽名;實現拋出異常

public interface SomeInterface { 

    void someMethod() throws Exception; 

} 

我使用第三方生成這個類的實現(JavaCC的 - 爲好奇)

生成的類長相天真是這樣的:

public class SomeClass implements SomeInterface { 

    public void someMethod() throws SomeException { 

    // Does something 

    } 
} 

哪裏SomeException當然是Exception一個子類。

(不)令人驚訝的代碼不編譯。

有沒有人對此有任何意見?

謝謝!

EDIT

更名方法SomeMethod()someMethod()

它已經是我的錯字......(對不起)

編輯#2:

對不起所有 - 我的巨大的錯誤。寫這個例子迫使我去掉代碼。我沒有注意到這個錯誤是在其他地方,而不是簽名。

多數民衆贊成在運行時編譯和自定義類裝載的「魔術」 ......

+0

「任何輸入?」這不是一個明確答案的問題。 – 2009-11-08 16:30:37

+0

發佈的代碼將被編譯。你能重現這個示例代碼的問題嗎? – Yishai 2009-11-08 16:38:35

+1

我的一個巨大的錯誤。由於我不得不剝奪這個例子的代碼,我沒有注意到這個問題已經在其他地方......真的很抱歉! – Yaneeve 2009-11-08 16:49:44

回答

1

它不會編譯,因爲方法名是不一樣的(檢查S上帽/的someMethod)

+0

但是,如果你解決這個問題,它應該編譯好。 – 2009-11-08 16:05:01

+0

只是在StackOverflow錯字... – Yaneeve 2009-11-08 16:10:22

+2

但編譯: import java.io.*; 接口SomeInterface void someMethod()throws Exception; } 類SomeClass的實現SomeInterface { 公共無效的someMethod()拋出IOException異常{ //請問什麼 }} 所以問題一定是別的東西... – 2009-11-08 16:25:45

1

在Java中,案例很重要。你的界面顯示someMethod,你的班級顯示SomeMethod

+0

只是在StackOverflow上一個錯字。 .. – Yaneeve 2009-11-08 16:13:36

0

爲什麼你的接口方法拋出異常?這幾乎總是錯誤的。異常只是其餘的基礎類型;這並不意味着以這種方式使用。

+0

它是因爲類加載問題...生成該類的代碼還會生成異常,該異常將在與接口不同的類加載器中加載。據我所知,我的界面使用相同的異常類型,因爲它永遠不會相同。現在有點更清楚了嗎? – Yaneeve 2009-11-08 16:34:55

+0

偶爾有這樣做的理由:它說該方法可以拋出一個特定於實現的檢查異常。例如,考慮可以寫入數據庫或文件的持久性機制。一個拋出SQLException,另一個拋出IOException。無論哪種情況,應用程序都需要在寫入失敗時捕獲異常,並採取一些操作(從簡單地將RuntimeException /子類打包到生成自定義錯誤頁面/對話框)。 – kdgregory 2009-11-13 13:15:49

+0

接口方法拋出有什麼問題?如果實現需要拋出,你是否建議不加選擇地拋出,這會被接口無證的?這看起來完全錯誤。 – user443854 2012-11-29 14:52:16

0

其中一種方法保護是公開的,另一種是默認的,這就是爲什麼你的代碼不能編譯。使公共或默認。