java - 编译错误在同一个catch子句中捕获异常

标签 java exception runtimeexception

我有两个 RuntimeException,如下所示:

@Getter
@RequiredArgsConstructor
public class MyCustomRuntimeException1 extends RuntimeException {

    private final String message;
    private final int code;
}

@Getter
@RequiredArgsConstructor
public class MyCustomRuntimeException2 extends RuntimeException {

    private final String message;
    private final int code;
}

然后我有我的 doSomethingMethod,我在同一个 catch 子句中捕获它们:

public void doSomething() {

[....]
[....]
 
    try {

         [....]
         [....]    

    } catch (MyCustomRuntimeException1 | MyCustomRuntimeException2 ex) {
            log.error("!! doSomething: An error occurred", ex);
            var code = ex.getCode();
            var message = ex.getMessage();

            [......]
            [......]
    }
}

我收到一个编译时错误,内容为以下行中的无法解析“RuntimeException”中的“getCode”方法:

var code = ex.getCode();

另一方面,这段代码可以正常工作:

public void doSomething() {

[....]
[....]
 
    try {

         [....]
         [....]    

    } catch (MyCustomRuntimeException1 ex) {
            log.error("!! doSomething: An error occurred", ex);
            var code = ex.getCode();
            var message = ex.getMessage();

            [......]
            [......]

    } catch (MyCustomRuntimeException2 ex) {
            log.error("!! doSomething: An error occurred", ex);
            var code = ex.getCode();
            var message = ex.getMessage();

            [......]
            [......]
    }
}

最佳答案

我相信,当您有多个 catch 子句时,这里发生的情况是,在您的情况下,异常参数的推断类型 ex 是最接近的常见父类(super class) 多捕获中列出的异常。我在语言引用中找不到这一点的明确记录,但至少在一个地方暗示了这一点。请参阅 14.20. the try statement 末尾的示例

因此,两个异常类中最接近的公共(public)父类(super class)是 RuntimeException,它当然没有 getCode() 方法。

正如 @VasilyLiakovsky 在评论中建议的那样,您可以创建一个抽象中间类来定义您想要共享的通用方法。

关于java - 编译错误在同一个catch子句中捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72064269/

相关文章:

c# - 让 Single 和 SingleOrDefault 抛出更简洁的异常

java - 错误 : Cannot load this JVM TI agent twice starting Oracle WebLogic Server 12. 1.3.0

java - 使用 DOM 解析 Java 中的 xml 文件

apache - 面临 java.lang.NoClassDefFoundError : org/apache/velocity/context/Context 问题

android - 一遍又一遍地点击主页按钮时,AsyncTask 失步了

grails 2.4.0 - java.lang.RuntimeException : Reloading agent exited via exception

java - 如何解释Exception是否会捕获RuntimeException?

java - 创建bean时出现错误

java - 从外部 JAR 读取图像

c# - 在代码中为合法状态抛出异常