课程章节介绍
同学们,咱们今天来看一下Salesforce里自定义异常这个知识点,其实很简单,我们自定义异常就是扩展了内置的Exception类。要注意,按照Apex的规范,自定义异常类的名字必须以Exception结尾,比如MyCustomException,不这么写编译器会报错。
这个自定义的异常类会继承Exception所有常用的方法,同时我们还可以给它加上自己的成员变量、额外的方法,甚至让它去实现接口,非常灵活。另外,它自动继承了Exception的四个构造器,所以我们不用重写构造器,直接拿过来用就行。
这里有一个很实用的模式叫“内部异常”或者说“重新抛出”模式。什么意思呢?就是我们在catch到一个底层异常的时候,不是直接抛出原来的异常,而是新建一个我们自己的业务异常,在构造这个新异常的时候,把原来的异常对象作为“原因”传进去。这样做的好处是保留了完整的错误链,堆栈跟踪信息里会同时显示原来的异常和我们新抛出的异常,方便我们一层层追查问题根源。
我举个具体例子,咱们有一个叫做DeliverdiseUtility的工具类,里面有个insertDeliverdiseance方法,它尝试去插入记录,如果插入时发生DmlException(也就是数据库操作异常),就会被catch住。此时我们会创建一个新的DeliverdiseanceException,然后把捕获到的DmlException作为原因传进去,再把这个新的异常抛出去。
在更上层的mainProcess方法里,我们就可以去捕获这个DeliverdiseResponseException(这里可能是笔误,应该是DeliverdiseanceException),拿到异常后,除了可以读取它自己的消息,还能通过getCause方法拿到里面那个原始的DmlException,甚至可以从堆栈里拿到出错的准确行号。这样从外到内,从业务异常到底层异常,信息一目了然。
所以总结一下,自定义异常就是继承Exception,命名要规范,可以往里面加东西,重新抛出时利用cause保留错误链。这个小技巧在实际项目里特别常用,能帮我们快速定位问题,让错误处理更清晰。好了,这一页就讲这么多。
关键词
Apex
Salesforce
Developer Guide