用于管理异常的类

时间:2015-10-15 18:14:48

标签: java methods try-catch short

使用用于捕获异常的短方法的类是否很好?

class ContractUtils{
  public static String getCode(Contract contract) throws MyException{
    try{
      return contract.getInfo().getCode(); //throws ContractException and LogicException
    }catch(Exception e){
      throw new MyException("error during code reading:"+e.getMessage, e);
    }
  }
  //other methods like above...
}

4 个答案:

答案 0 :(得分:3)

如果自定义异常为调用代码提供了额外的上下文或值,那么它是有用的并且鼓励创建它们。

您使用静态方法的方法是完全可以接受的。这是一个很好的SO answer用于短静态方法的定义用例。

答案 1 :(得分:2)

您的实用工具类ContractUtil引入了一个间接级别,只是为了将原始异常转换为另一个异常:

而不是直接电话:

 return contract.getInfo().getCode()

您现在正在撰写更多人工

 return ContractUtils.getCode(contract);

可能会出现此解决方案对齐的情况,例如:

  

你是   不允许抛出ContractException或LogicException,而且你正在调用这个方法   时间。

但是如果你可以改变它的签名,那么最好重新设计原始方法以仅抛出MyException

答案 2 :(得分:1)

将应用程序逻辑与错误处理分开以提高可读性非常有用。

但不是在实用程序类中,因为您可以忘记使用它,并直接完成其任务并仍然期望自定义异常。如果经常使用它(并使Contract.getInfo()私有),我会将此逻辑放在Contact类中。另一个缺点是,它可能导致实用程序类对其他类的实现细节过于了解(LoD - https://en.wikipedia.org/wiki/Law_of_Demeter),可能会破坏封装并使其更难以维护,因为依赖性更高。

并且,您可能希望捕获特定的例外情况。

答案 3 :(得分:0)

最好在代码中单独捕获和处理异常。建议不要分配常见的自定义异常。

有关管理例外的最佳做法,请参阅此链接:

https://softwareengineering.stackexchange.com/questions/209693/best-practices-to-create-error-codes-pattern-for-an-enterprise-project-in-c