2013-04-29 92 views
-1

我有一個接口問題,我必須寫。在我們公司的項目中,我們有一個類提供一些Web方法,如:logIn,reporting,addNote和不同的方法。每種方法都會拋出由某人寫的異常(可能是寫這個類的同一個人)。 現在我必須寫這個類的「等價物」(使用Web服務)併爲這兩個類編寫接口。但是我的類沒有拋出任何異常(我不寫拋出異常在簽名中,我用try-catch塊來處理這個異常)。是否有任何簡單的方法來爲這兩個類編寫接口(由於該異常而具有不同的簽名)?或者我必須重寫這個第一類並在其中使用try-catch塊(或修改我的類)。我想避免這種情況...兩個類似接口的接口

+0

如果你的類中的方法拋出異常,然後由你的類實現應該會拋出異常的方法接口的方法。 – 2013-04-29 14:43:15

回答

0

在你的接口必須定義異常定義你的方法的簽名。 換句話說,例外是簽名的一部分。

+0

所以,我必須改變這個第一類,它有關於拋出異常或添加到我的類方法這個異常的信息?是否有某種「看到」這種情況? – caro2 2013-04-29 14:48:47

2

(我不寫在簽名拋出異常,我用try-catch塊與此異常處理)

聽起來異常處理的濫用......除非你的代碼可以確實處理所有這些例外。對異常做的正確的事情是讓它傳播到一個可以正確處理的cakll堆棧上的點。

但無論哪種方式,你可以寫在方法聲明爲拋出異常的通用接口。在您的課程版本中,只需將特例留出簽名;例如

public interface Foo { 
    public void bar() throws SomeException; 
} 

public class OldFoo implements Foo { 
    public void bar() throws SomeException { ... } 
} 

public class NewFoo implements Foo { 
    public void bar() { ... } 
} 

接口方法拋出異常是合法的Java,並且該方法的實現不拋出它。

+0

是的,它的工作原理!這就是我需要:)謝謝你的幫助。但這是一種不好的做法嗎? – caro2 2013-04-29 14:56:11

+0

不是。這樣做不是不好的做法。然而,它是「在不能正確處理它們的地方捕捉例外的不良做法。 – 2013-04-29 15:31:27

0

如果具體實現的一個拋出一個異常,而另一個捕獲它,不幸的是你不能使用相同的接口。異常是方法定義的一部分,如果兩個方法處理異常的方式不同,那麼它們就不一樣了。所以,你將不得不修改我害怕的一個類。

0

你只能覆蓋在接口中聲明的方法拋出相同的異常或派生類型例外,我的意思是,你不能讓你實現的方法不拋出任何異常,而在你的接口中的方法被描述爲拋出特定的異常。