【问题标题】:Is it possible to automatically call an internal exception method when the exception is thrown?抛出异常时是否可以自动调用内部异常方法?
【发布时间】:2020-08-06 08:17:25
【问题描述】:

每次抛出某个自定义异常时,我都需要执行一个方法。执行的代码将向我的 API 报告异常。异常类有一个boolean 参数,用于说明是否应报告异常。假设我有以下异常编码:

public MyException extends Exception {
    
    private final String message;

    private final int code;

    private final boolean report;
 
    public MyException(String message, int code, boolean report) {
        this.message = message;
        this.code = code;
        this.report = report;
    }

    public void report() {
        if(report) {
            // Report some stuff
        }
    }

}

MyException 被抛出时,我希望report() 中的代码被执行。我已经想过手动调用方法了:

try {
     throw new MyException("Test", 1, true);
} catch(MyException e) {
     e.report();
}

但我想知道是否可以在抛出异常时自动调用该函数。

...
throw new MyExcepion("Test", 1, true); // Implicitlly calls report()
...

请注意,我不想在异常实例化时调用它,因为可能会发生这样的事情:

...
public MyException(String message, int code, boolean report) {
        this.message = message;
        this.code = code;
        this.report = report;
        report();
}
...
int var = 0;
MyException ex = new MyException("test", 1, true);
if (var != 0) {
    throw ex;
}
//  Here the exception would be reported but never thrown.

这甚至可能吗?第三方图书馆可以做到这一点吗?任何帮助表示赞赏!

【问题讨论】:

    标签: java exception reporting


    【解决方案1】:

    Spring AspectJ 如果已经有 spring 可能是答案 - 请参阅示例 https://howtodoinjava.com/spring-aop/aspectj-afterthrowing-annotation-example/

    【讨论】:

    • 似乎是我正在寻找的东西,但我首先想知道是否有没有库的本地方法,因为 Spring 是一个非常重的库。
    【解决方案2】:

    您可以使用和UncaughtExceptionHandler

    使用模式是:

    1. 创建自己的UncaughtExceptionHandler,这只是一种方法的实现:uncaughtException()
    2. 使用setDefaultUncaughtExceptionHandler 在每个线程或线程组上注册您的处理程序

    如果您使用任何框架,例如 Java EE 或 Spring,可能会有更好(更简洁)的方法,例如 Java EE ExceptionMapper

    【讨论】:

    • 只有在没有捕获异常的情况下才有效,对吧?所以我仍然需要调用report() 方法如果捕获它。
    猜你喜欢
    • 1970-01-01
    • 2010-12-06
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    相关资源
    最近更新 更多