使用用于捕获异常的短方法的类是否很好?
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...
}
答案 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)
最好在代码中单独捕获和处理异常。建议不要分配常见的自定义异常。
有关管理例外的最佳做法,请参阅此链接: