首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >类的Java异常处理程序

类的Java异常处理程序
EN

Stack Overflow用户
提问于 2022-05-26 21:41:04
回答 2查看 230关注 0票数 0

对于Java中类的所有实例方法,是否有一个统一的异常处理程序?例如,如果我有类Car

代码语言:javascript
运行
复制
class Car {
  public void drive(double miles) {
     ...
  }

  public void turnLeft() {
    ...
  }
  
  public void turnRight() {
    ...
  }
}

我是否可以添加一个处理程序函数,每次这些方法引发异常时都会调用它?最终目标是以统一的方式记录所有这些异常,即使它们最终被更高级别的堆栈捕获和忽略。

EN

回答 2

Stack Overflow用户

发布于 2022-05-27 02:48:41

将代理扩展到委托汽车。如果car有接口,我们可以使用jdk代理,也可以使用cglib。就像某种框架(Spring.)已经提供了。下面的代码是cglib的一个例子。

代码语言:javascript
运行
复制
class ErrorHandleProxy implements MethodInterceptor {
    public Object createProxy(Object target) {
        Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(target.getClass());
        enhancer.setCallback(this);
        enhancer.setClassLoader(target.getClass().getClassLoader());
        return enhancer.create();
    }

    @Override
    public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
        Object ret = null;
        try {
            ret = proxy.invokeSuper(obj, args);
        } catch (Exception e) {
            /// do logging or rethrow exception
        }
        return ret;
    }
}

然后,我们可以用这个代理呼叫car

代码语言:javascript
运行
复制
Car car = new Car();
Car proxy = (Car)new ErrorHandleProxy().createProxy(car);
proxy.xxx
票数 1
EN

Stack Overflow用户

发布于 2022-05-26 21:53:24

如果使用spring,则可以使用一个https://www.baeldung.com/exception-handling-for-rest-with-spring类捕获ExceptionMapper类中的所有异常。

如果它是一个普通的应用程序,那么在您的公共静态void中,您可以将您的代码包围在try catch中,以捕获所有异常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72398300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档