两个相似类的接口

时间:2013-04-29 14:40:34

标签: java exception interface

我遇到了必须编写的接口问题。在我们的公司项目中,我们有一个类提供了一些Web方法,如:logIn,reporting,addNote和different。每个方法抛出一个由某人写的异常(可能是编写这个类的同一个人)。 现在我必须编写这个类的“等价”(使用Web服务)并为这两个类编写接口。但是我的类没有抛出任何异常(我不会在签名中写抛出异常,我使用try-catch块来处理这个异常)。是否有任何简单的方法为两个类编写接口(由于该异常而具有不同的签名)?或者我必须重写这个第一个类并在其中使用try-catch块(或修改我的类)。我想避免这种情况...

4 个答案:

答案 0 :(得分:2)

  

(我不会在签名中写抛出异常,我使用try-catch块来处理这个异常)

这听起来像是滥用异常处理......除非您的代码能真正处理所有这些异常。与异常相关的正确做法是允许它传播到cakll堆栈中可以正确处理正确的位置。

但无论哪种方式,您都可以编写一个公共接口,其中方法被声明为抛出异常。在您的班级版本中,只需将例外保留在签名之外; e.g。

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,并且该方法的实现不会抛出异常。

答案 1 :(得分:0)

界面中定义的方法签名必须定义异常。 换句话说,例外是签名的一部分。

答案 2 :(得分:0)

如果其中一个具体实现抛出异常,另一个捕获它,遗憾的是您不能使用相同的接口。异常是方法定义的一部分,如果两个方法以不同方式处理异常,那么它们就不一样了。所以,你将不得不修改我害怕的一个类。

答案 3 :(得分:0)

你只能覆盖在接口中声明的方法来抛出相同的异常或派生类型异常,我的意思是你不能让你实现的方法不抛出任何异常,而在你的界面中,方法被描述为抛出一个特殊的例外。