Java程序中异常的使用

  • 在Java中如何使用好Exception是门艺术。
  • 一般我们常见的有checked异常(Exception)和unchecked异常(RuntimeException),区别在于前者在语法层面强制开发者对异常进行处理,后者则不用。
  • 两种异常的好坏或和使用方式大多还是根据场景而定。

一个现状

  • 目前接手了一个项目,此项目定位为基础组件,对外部系统提供REST API服务和对应SDK。
  • 其中SDK的大致逻辑为:
//调用rest api
public Result submit(Object args){
  Result result;
  Request req = createRequest(args);  //构造rest请求
  try{
    result = doRestRequest(req);    //请求http
  }
  catch(Exception e){
    result = new Result();
    result.code = -1;  //发生异常时设置结果码为失败
  }
  return result;
}
  • 逻辑上没有问题,调用失败的场景通过Result.code告诉给使用者。
  • 从现在分布式微服务应用角度看,远程调用发生错误应该要被认为是一种常态,开发者必须关心发生错误的场景。
  • 这样的SDK封装往往会让使用方就会忽略错误的场景,直接提交本地事务完成请求,最终造成业务方与基础组件中的数据状态不一致。

改进

  • 这种问题发生太多次了,每次都得事后手动处理。所以在下个版本的SDK中,打算使用Exception进行改造。
//调用rest api
public Result submit(Object args) throws Exception{
  Request req = createRequest(args);  //构造rest请求
  try{
    return doRestRequest(req);    //请求http
  }
  catch(Exception e){
    throw new Exception(e);    //此处可以对异常做一个封装
  }
}
  • 这样至少在代码层面上提示使用方必须处理错误的场景,进行数据回滚和在界面上进行提示。

你可能感兴趣的:(Java程序中异常的使用)