gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:48:56 29 4
gpt4 key购买 nike

案例简化:遗留代码。 3 个异常 X、Y 和 ZException。 A 类具有方法 public C fetch(...) throws X 和 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 中)开始抛出正确的类型。然而,它会(正如预期的那样)抛出 ZException 两次。

我的问题是方法签名抛出 SomeException、SomeException (即再次声明相同的异常)是否有问题?代码编译并运行良好。

最佳答案

... throws IOException, IOException { ... .

冗余只是令人困惑,但运行良好。

一个更常见的冗余示例是这样的

throws StreamCorruptedException, IOException {

在本例中,StreamCorruptedException 是一个IOException,因此不需要它,但可能会包含它以使其与 Javadoc 一致,Javadoc 可能会提供此异常的更多详细信息。

关于Java 方法签名抛出相同的异常(通过泛型)两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37747791/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com