-1

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

4

4 回答 4

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。

于 2013-04-29T14:45:54.637 回答
0

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

于 2013-04-29T14:46:17.600 回答
0

你只能重写接口中声明的方法来抛出相同的异常或派生类型的异常,我的意思是你不能让你实现不抛出任何异常的方法,而在你的接口中,这些方法被描述为抛出一个特定的异常.

于 2013-04-29T14:54:42.900 回答
0

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

于 2013-04-29T14:43:32.243 回答