gpt4 book ai didi

Java异常推导

转载 作者:行者123 更新时间:2023-12-02 04:57:55 25 4
gpt4 key购买 nike

我正在让我的 foo 方法抛出异常 A,如下所示

void foo() throws A {
....
throw new A();
}

有一个调用 foo 的预先存在的函数 bar(),bar 最初抛出一个异常 B,它是 A 的父类(super class),如在

void bar() throws B {
foo();
throw new B();
}

问题是在 foo() 中添加 throw new A 之后,编译器正在抄袭我声明的内容那个 bar() 也会抛出 A。这不是从 A 扩展 B 的事实中隐含的吗?除了在 bar() 的 throws 子句中添加 A 之外,还有什么解决方法?

编辑:

一个是

public class A  extends B {
private complex-type type;
public A(String message);
public A(complex-type type);
}

B是

public class B extends C {
public B(String message);
}

我认为 A 的构造函数没有 super 调用。会不会是这个原因?

最佳答案

如果你从函数栏中移除throws B。默认操作将是重新抛出 foo() 中生成的异常。

您可以在 foo() 的调用者中捕获此异常。 Foo 本身当然也可以像您的情况一样抛出异常。在这种情况下,您必须在 throw 子句中添加 A

因此。

void bar() throws A, B {
foo();
throw new B();
}

如果 A 和 B 都扩展了 Throwable 类或实现了 Exception 接口(interface),您也可以简单地抛出 Exception

关于Java异常推导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19797010/

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