原文链接:https://cloud.tencent.com/dev...
这是自定义异常的实现方式,中间有一步是创建了一个接口,然后创建一个枚举类去实现接口。
请问这么写有什么好处呢?为什么不直接写枚举类出来?请大神指教,谢谢!
原文链接:https://cloud.tencent.com/dev...
这是自定义异常的实现方式,中间有一步是创建了一个接口,然后创建一个枚举类去实现接口。
请问这么写有什么好处呢?为什么不直接写枚举类出来?请大神指教,谢谢!
BusinessException
可以通过一个 ErrorCode
来构造,至于这个 ErrorCode
是某个具体的类,还是枚举类,无所谓,反正主要是要用它的 getCode()
和 getDesc()
。
然后系统内部需要预定义一些错误对象,显示用枚举类来定义是最省事的办法,毕竟写 E_100101(100101, "")
比写 new CommonErrorCode(100101, "")
要少写不少字。
但是,如果用户代码需要自定义错误呢?显示用户代码不会去扩展 CommonErrorCode
(假设已经封装在包中),也不应该直接去修改。那么用户可以定义自己的错误消息类 CustomErrorCode implments ErrorCode
。如果用户的错误类型比较多,也可以定义成另一个实现了 ErrorCode
的枚举类。
3 回答2.6k 阅读✓ 已解决
3 回答4.1k 阅读✓ 已解决
8 回答3.8k 阅读
4 回答2.8k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.6k 阅读✓ 已解决
4 回答1.9k 阅读
你好,这个问题确实比较有意思哈。我想我可以以我的理解来稍作解释。
首先,用枚举来实现这个ErrorCode接口,那么这个枚举类中的每个枚举就相当于这个接口的实现类。
正如你所贴的链接的文章末尾的代码:
当给
BusinessException
的构造方法传入一个具体的枚举时,那么BusinessException
中的ErrorCode属性就能够初始化为该枚举。我们当然也可以省去这个属性直接在BusinessException
中声明一个CommonErrorCode
的属性,然后初始化的时候也可以给它赋值,但怎么说呢,这样就破坏了封装的优雅性,因为我们在BusinessException
中只想要这些枚举的行为,而不是具体的什么枚举内容,那么把这些行为封装到一个接口中时就变得清晰和易于使用,当别人或别的代码来调用用你的BusinessException
时也会减少与枚举的直接接触,减少了 耦合。我讲的可能不是很好,我觉得可以把这个事情看成是每一个枚举都是接口的实现类,从这个角度或者能把问题看的清晰一些。