Java方法签名两次抛出相同的异常(通过泛型)

时间:2016-06-10 12:02:15

标签: java

案例简化: 遗留代码。 3个例外X,Y和ZException。 A类有方法public C fetch(...) throws X and YException,B类有public C fetch(...) throws ZException。方法实现几乎相同,所以我想知道我可以将它重构为一些帮助类。方法签名无法更改。我提出了以下帮助类

public class Common<T extends Exception, V extends Exception>{

    public static interface ExceptionSupplier<T extends Exception> {
        public T create();
    }

    private ExceptionSupplier<T> es;
    private ExceptionSupplier<V> es2;

    public Common(ExceptionSupplier<T> es, ExceptionSupplier<V> es2) {
        this.es = es;
        this.es2 = es2;
    }

    public void method() throws T, V {
        //example that would could throw both T and V
        if (Math.random() < 0.5) {
            throw es.create();
        } else {
            throw es2.create();
        }
    }

}

然后我可以在A和B中创建Common类的实例,例如

helper = new CommonThrower<ZException, ZException>(zSupplier, zSupplier);
helper = new CommonThrower<XException, YException>(xSupplier, ySupplier)

并调用helper.fetch(...)并显示(在eclipse中)beging throw正确的类型。但是它会(有点预期)两次抛出ZException。

我的问题是,有方法签名抛出SomeException,SomeException(即再次声明相同的异常)有什么问题吗?代码编译并运行正常。

1 个答案:

答案 0 :(得分:1)

  

...抛出IOException,IOException {...。

冗余只是令人困惑,但运行正常。

更常见的冗余示例类似于

throws StreamCorruptedException, IOException {

在这种情况下,StreamCorruptedExceptionIOException所以不需要它,但可能会包含它以使其与Javadoc保持一致,这可能会为此异常提供更多详细信息。