案例简化:
遗留代码。 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(即再次声明相同的异常)有什么问题吗?代码编译并运行正常。
答案 0 :(得分:1)
...抛出IOException,IOException {...。
冗余只是令人困惑,但运行正常。
更常见的冗余示例类似于
throws StreamCorruptedException, IOException {
在这种情况下,StreamCorruptedException
是IOException
所以不需要它,但可能会包含它以使其与Javadoc保持一致,这可能会为此异常提供更多详细信息。